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_id is provided, the value of $member_type is honored.

Default value: array()


Top ↑

Return Return

(array)


Top ↑

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 );
	}

Top ↑

Changelog Changelog

Changelog
Version Description
5.0.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.