BP_XProfile_Group::get_group_field_ids( array $group_ids, array $args = array() )
Gets group field IDs, based on passed parameters.
Description Description
Parameters Parameters
- $group_ids
-
(Required) Array of group IDs.
- $args
-
(Optional) Array of optional arguments:
- 'exclude_fields'
(array) Comma-separated list or array of field IDs to exclude. - 'user_id'
(int) Limit results to fields associated with a given user's member type. - 'member_type'
(array|string) Limit fields by those restricted to a given member type, or array of member types. If$user_idis provided, the value of$member_typeis honored.
Default value: array()
- 'exclude_fields'
Return Return
(array)
Source Source
File: bp-xprofile/classes/class-bp-xprofile-group.php
public static function get_group_field_ids( $group_ids, $args = array() ) {
global $wpdb;
$r = array_merge(
array(
'exclude_fields' => false,
'user_id' => false,
'member_type' => false,
),
$args
);
$bp = buddypress();
// Setup IN query from group IDs.
if ( empty( $group_ids ) ) {
$group_ids = array( 0 );
}
$group_ids_in = implode( ',', array_map( 'intval', $group_ids ) );
// Support arrays and comma-separated strings.
$exclude_fields_cs = wp_parse_id_list( $r['exclude_fields'] );
// Visibility - Handled here so as not to be overridden by sloppy use of the
// exclude_fields parameter. See bp_xprofile_get_hidden_fields_for_user().
$hidden_user_fields = bp_xprofile_get_hidden_fields_for_user( $r['user_id'] );
$exclude_fields_cs = array_merge( $exclude_fields_cs, $hidden_user_fields );
$exclude_fields_cs = implode( ',', $exclude_fields_cs );
// Set up NOT IN query for excluded field IDs.
if ( ! empty( $exclude_fields_cs ) ) {
$exclude_fields_sql = "AND id NOT IN ({$exclude_fields_cs})";
} else {
$exclude_fields_sql = '';
}
// Set up IN query for included field IDs.
$include_field_ids = array();
// Member-type restrictions.
if ( bp_get_member_types() ) {
if ( $r['user_id'] || false !== $r['member_type'] ) {
$member_types = $r['member_type'];
if ( $r['user_id'] ) {
$member_types = bp_get_member_type( $r['user_id'], false );
if ( empty( $member_types ) ) {
$member_types = array( 'null' );
}
}
$member_types_fields = BP_XProfile_Field::get_fields_for_member_type( $member_types );
$include_field_ids += array_keys( $member_types_fields );
}
}
$in_sql = '';
if ( ! empty( $include_field_ids ) ) {
$include_field_ids_cs = implode( ',', array_map( 'intval', $include_field_ids ) );
$in_sql = " AND id IN ({$include_field_ids_cs}) ";
}
$field_ids_sql = "SELECT id FROM {$bp->profile->table_name_fields} WHERE group_id IN ( {$group_ids_in} ) AND parent_id = 0 {$exclude_fields_sql} {$in_sql} ORDER BY field_order";
$cached = bp_core_get_incremented_cache( $field_ids_sql, 'bp_xprofile_groups' );
if ( false === $cached ) {
$field_ids = $wpdb->get_col( $field_ids_sql );
bp_core_set_incremented_cache( $field_ids_sql, 'bp_xprofile_groups', $field_ids );
} else {
$field_ids = $cached;
}
return array_map( 'intval', $field_ids );
}
Changelog Changelog
| Version | Description |
|---|---|
| 5.0.0 | Introduced. |