bp_xprofile_group :: get(大批args美元数组()

填充这一点BP_XProfile_Group具有配置文件字段组,字段和字段数据的对象。

描述

参数

args美元

大批(可选)可选参数数组:

  • “profile_group_id”
    (int)将结果限制到单个配置文件组。
  • “user_id”
    (int)如果您想加载特定用户的数据,则是必需的。Default:显示的用户ID。
  • “member_type”
    (数组|字符串)通过限制给定概要文件类型或概要文件类型数组来限制字段。如果user_id美元提供了,价值member_type美元将被提供的用户的配置文件类型覆盖。“任何”的特殊值将仅返回由配置文件类型 - 即适用于任何类型的字段的字段。
  • 'hide_empty_groups'
    (保龄球)隐藏没有任何字段的组。默认值:false。
  • “hide_empty_fields”
    (保龄球)符合隐藏用户未提供数据的字段。默认值:false。
  • “fetch_fields”
    (保龄球)是否获取每个组的字段。默认值:false。
  • “fetch_field_data”
    (保龄球)是否为每个字段取数据。需要一个user_id美元。默认值:false。
  • 'consuldure_groups'
    (大批)要排除的组id的逗号分隔的列表或数组。
  • 'exclude_fields'
    (大批)要排除的字段id的逗号分隔的列表或数组。
  • 'Includ_Fields'
    (大批)要包含的字段id的逗号分隔的列表或数组。
  • “update_meta_cache”
    (保龄球)是否为所有检索到的组、字段和数据预取xprofilemeta。默认值:真的。

默认值:数组()

返回

(大批)美元集团

来源

文件:bp-xprofile /类/ class-bp-xprofile-group.php

公共静态函数get($ args = array()){global $ wpdb;//解析参数。$ r = wp_parse_args($ args,array('profile_group_id'=> false,'user_id'=> bp_displayed_user_id(),'member_type'=> false,'hide_empty_groups'=> false,'hide_empty_fields'=> false,'fetch_fields'false,'fetch_field_data'=> false,'fetch_visibility_level'=> false,'fallude_groups'=> false,'callude_fields'=> false,'update_meta_cache'=> true,'repeater_show_main_fields_only'=> false'=> false);//跟踪用于缓存引发的对象ID。$ object_ids = array('group'=> array(),'字段'=> array(),'data'=> array(),);// 在哪里。if(!空($ r ['profile_group_id']))){$ where_sql = $ wpdb->准备('其中g.id =%d',$ r ['profile_group_id']);elsef($ r ['complude_groups']){$ callured = join(',',wp_parse_id_list($ r ['consuld_groups'])));$ where_sql =“其中g.id不在({$ exclude})”; } else { $where_sql = ''; } $bp = buddypress(); // Include or exclude empty groups. if ( ! empty( $r['hide_empty_groups'] ) ) { $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC" ); } else { $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g {$where_sql} ORDER BY g.group_order ASC" ); } // Get all group data. $groups = self::get_group_data( $group_ids ); // Bail if not also getting fields. if ( empty( $r['fetch_fields'] ) ) { return $groups; } // Get the group ids from the groups we found. $group_ids = wp_list_pluck( $groups, 'id' ); // Store for meta cache priming. $object_ids['group'] = $group_ids; // Bail if no groups found. if ( empty( $group_ids ) ) { return $groups; } // Setup IN query from group IDs. $group_ids_in = implode( ',', (array) $group_ids ); // Support arrays and comma-separated strings. $exclude_fields_cs = wp_parse_id_list( $r['exclude_fields'] ); /** * For each group, check if it is a repeater set. * If so, * - get the number of sets, user has created. * - create as many set of clones for each such field in the group, if not created already * - include those field ids in loop */ foreach ( $group_ids as $group_id ) { $is_repeater_enabled = 'on' == BP_XProfile_Group::get_group_meta( $group_id, 'is_repeater_enabled' ) ? true : false; if ( $is_repeater_enabled ) { $clone_field_ids_all = bp_get_repeater_clone_field_ids_all( $group_id ); if ( $r['repeater_show_main_fields_only'] ) { //exclude clones $exclude_fields_cs = array_merge( $exclude_fields_cs, $clone_field_ids_all ); } else { //exclude template fields $template_field_ids = bp_get_repeater_template_field_ids( $group_id ); $exclude_fields_cs = array_merge( $exclude_fields_cs, $template_field_ids ); //include only the subset of clones the current user has data in $user_field_set_count = bp_get_profile_field_set_count( $group_id, $r['user_id'] ); $clone_field_ids_has_data = bp_get_repeater_clone_field_ids_subset( $group_id, $user_field_set_count ); $clones_to_exclude = array_diff( $clone_field_ids_all, $clone_field_ids_has_data ); $exclude_fields_cs = array_merge( $exclude_fields_cs, $clones_to_exclude ); } } } // 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}) "; } // Fetch the fields. $field_ids = $wpdb->get_col( "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" ); foreach( $groups as $group ) { $group->fields = array(); } // Bail if no fields. if ( empty( $field_ids ) ) { return $groups; } $field_ids = array_map( 'intval', $field_ids ); // Start Remove the social network fields from dashboard page. $social_networks_key = 0; if ( bp_is_user_profile() && ! bp_is_user_profile_edit() && ! bp_is_register_page() ) { foreach ( $field_ids as $profile_fields ) { $field_obj = xprofile_get_field( $profile_fields, null, false ); if ( 'socialnetworks' === $field_obj->type ) { $social_networks_key = (int) $profile_fields; } } } // If social networks field found then remove from the $field_ids array. if ( $social_networks_key > 0 ) { if (($key = array_search($social_networks_key, $field_ids)) !== false) { unset($field_ids[$key]); } } // End Remove the social network fields from dashboard page. // Prime the field cache. $uncached_field_ids = bp_get_non_cached_ids( $field_ids, 'bp_xprofile_fields' ); if ( ! empty( $uncached_field_ids ) ) { $_uncached_field_ids = implode( ',', array_map( 'intval', $uncached_field_ids ) ); $uncached_fields = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_fields} WHERE id IN ({$_uncached_field_ids})" ); foreach ( $uncached_fields as $uncached_field ) { $fid = intval( $uncached_field->id ); wp_cache_set( $fid, $uncached_field, 'bp_xprofile_fields' ); } } // Pull field objects from the cache. $fields = array(); foreach ( $field_ids as $field_id ) { $fields[] = xprofile_get_field( $field_id, null, false ); } // Store field IDs for meta cache priming. $object_ids['field'] = $field_ids; // Maybe fetch field data. if ( ! empty( $r['fetch_field_data'] ) ) { // Get field data for user ID. if ( ! empty( $field_ids ) && ! empty( $r['user_id'] ) ) { $field_data = BP_XProfile_ProfileData::get_data_for_user( $r['user_id'], $field_ids ); } // Remove data-less fields, if necessary. if ( ! empty( $r['hide_empty_fields'] ) && ! empty( $field_ids ) && ! empty( $field_data ) ) { // Loop through the results and find the fields that have data. foreach( (array) $field_data as $data ) { // Empty fields may contain a serialized empty array. $maybe_value = maybe_unserialize( $data->value ); // Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731. if ( ( ! empty( $maybe_value ) || '0' == $maybe_value ) && false !== $key = array_search( $data->field_id, $field_ids ) ) { // Fields that have data get removed from the list. unset( $field_ids[ $key ] ); } } // The remaining members of $field_ids are empty. Remove them. foreach( $fields as $field_key => $field ) { if ( in_array( $field->id, $field_ids ) ) { unset( $fields[ $field_key ] ); } } // Reset indexes. $fields = array_values( $fields ); } // Field data was found. if ( ! empty( $fields ) && ! empty( $field_data ) && ! is_wp_error( $field_data ) ) { // Loop through fields. foreach( (array) $fields as $field_key => $field ) { // Loop through the data in each field. foreach( (array) $field_data as $data ) { // Assign correct data value to the field. if ( $field->id == $data->field_id ) { $fields[ $field_key ]->data = new stdClass; $fields[ $field_key ]->data->value = $data->value; $fields[ $field_key ]->data->id = $data->id; } // Store for meta cache priming. $object_ids['data'][] = $data->id; } } } } // Prime the meta cache, if necessary. if ( ! empty( $r['update_meta_cache'] ) ) { bp_xprofile_update_meta_cache( $object_ids ); } // Maybe fetch visibility levels. if ( ! empty( $r['fetch_visibility_level'] ) ) { $fields = self::fetch_visibility_level( $r['user_id'], $fields ); } // Merge the field array back in with the group array. foreach( (array) $groups as $group ) { // Indexes may have been shifted after previous deletions, so we get a // fresh one each time through the loop. $index = array_search( $group, $groups ); foreach( (array) $fields as $field ) { if ( $group->id === $field->group_id ) { $groups[ $index ]->fields[] = $field; } } // When we unset fields above, we may have created empty groups. // Remove them, if necessary. if ( empty( $group->fields ) && ! empty( $r['hide_empty_groups'] ) ) { unset( $groups[ $index ] ); } // Reset indexes. $groups = array_values( $groups ); } return $groups; }

更新日志

更新日志
版本 描述
BuddyPress 1.2.0 介绍。

问题吗?

我们总是很高兴帮助您处理代码或其他问题!搜索我们的开发人员文档联系支持,或与我们联系销售团队