BP_XProfile_Field::get_fields_for_member_type( string|array $member_types )
Gets the IDs of fields applicable for a given profile type or array of profile types.
Description
Parameters
- $member_types
-
(Required) profile type or array of profile types. Use 'any' to return unrestricted fields (those available for anyone, regardless of profile type).
Return
(array) Multi-dimensional array, with field IDs as top-level keys, and arrays of profile types associated with each field as values.
Source
File: bp-xprofile/classes/class-bp-xprofile-field.php
public static function get_fields_for_member_type( $member_types ) { global $wpdb; $fields = array(); if ( empty( $member_types ) ) { $member_types = array( 'any' ); } elseif ( ! is_array( $member_types ) ) { $member_types = array( $member_types ); } $bp = buddypress(); // Pull up all recorded field profile type data. $mt_meta = wp_cache_get( 'field_member_types', 'bp_xprofile' ); if ( false === $mt_meta ) { $mt_meta = $wpdb->get_results( "SELECT object_id, meta_value FROM {$bp->profile->table_name_meta} WHERE meta_key = 'member_type' AND object_type = 'field'" ); wp_cache_set( 'field_member_types', $mt_meta, 'bp_xprofile' ); } // Keep track of all fields with recorded member_type metadata. $all_recorded_field_ids = wp_list_pluck( $mt_meta, 'object_id' ); // Sort member_type matches in arrays, keyed by field_id. foreach ( $mt_meta as $_mt_meta ) { if ( ! isset( $fields[ $_mt_meta->object_id ] ) ) { $fields[ $_mt_meta->object_id ] = array(); } $fields[ $_mt_meta->object_id ][] = $_mt_meta->meta_value; } /* * Filter out fields that don't match any passed types, or those marked '_none'. * The 'any' type is implicitly handled here: it will match no types. */ foreach ( $fields as $field_id => $field_types ) { if ( ! array_intersect( $field_types, $member_types ) ) { unset( $fields[ $field_id ] ); } } // Any fields with no member_type metadata are available to all profile types. if ( ! in_array( '_none', $member_types ) ) { if ( ! empty( $all_recorded_field_ids ) ) { $all_recorded_field_ids_sql = implode( ',', array_map( 'absint', $all_recorded_field_ids ) ); $unrestricted_field_ids = $wpdb->get_col( "SELECT id FROM {$bp->profile->table_name_fields} WHERE id NOT IN ({$all_recorded_field_ids_sql})" ); } else { $unrestricted_field_ids = $wpdb->get_col( "SELECT id FROM {$bp->profile->table_name_fields}" ); } // Append the 'null' pseudo-type. $all_member_types = bp_get_member_types(); $all_member_types = array_values( $all_member_types ); $all_member_types[] = 'null'; foreach ( $unrestricted_field_ids as $unrestricted_field_id ) { $fields[ $unrestricted_field_id ] = $all_member_types; } } return $fields; }
Changelog
Version | Description |
---|---|
BuddyPress 2.4.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.