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.