BP_XProfile_ProfileData::get_value_byid( int $field_id, int|array|null $user_ids = null )

Get profile field values by field ID and user IDs.


Description Description

Supports multiple user IDs.


Parameters Parameters

$field_id

(Required) ID of the field.

$user_ids

(Optional) ID or IDs of user(s).

Default value: null


Top ↑

Return Return

(string|array) Single value if a single user is queried, otherwise an array of results.


Top ↑

Source Source

File: bp-xprofile/classes/class-bp-xprofile-profiledata.php

	public static function get_value_byid( $field_id, $user_ids = null ) {
		global $wpdb;

		if ( empty( $user_ids ) ) {
			$user_ids = bp_displayed_user_id();
		}

		$return_single_result = false;
		if ( ! is_array( $user_ids ) ) {
			$return_single_result = true;
		}

		$user_ids = wp_parse_id_list( $user_ids );

		// Assemble uncached IDs.
		$uncached_ids = array();
		foreach ( $user_ids as $user_id ) {
			$cache_key = "{$user_id}:{$field_id}";
			if ( false === wp_cache_get( $cache_key, 'bp_xprofile_data' ) ) {
				$uncached_ids[] = $user_id;
			}
		}

		// Prime caches.
		if ( ! empty( $uncached_ids ) ) {
			$bp = buddypress();
			$uncached_ids_sql = implode( ',', $uncached_ids );
			$queried_data = $wpdb->get_results( $wpdb->prepare( "SELECT id, user_id, field_id, value, last_updated FROM {$bp->profile->table_name_data} WHERE field_id = %d AND user_id IN ({$uncached_ids_sql})", $field_id ) );

			// Rekey.
			$qd = array();
			foreach ( $queried_data as $data ) {
				$qd[ $data->user_id ] = $data;
			}

			foreach ( $uncached_ids as $id ) {
				// The value was successfully fetched.
				if ( isset( $qd[ $id ] ) ) {
					$d = $qd[ $id ];

				// No data found for the user, so we fake it to
				// avoid cache misses and PHP notices.
				} else {
					$d = new stdClass;
					$d->id           = '';
					$d->user_id      = $id;
					$d->field_id     = $field_id;
					$d->value        = '';
					$d->last_updated = '';
				}

				$cache_key = "{$d->user_id}:{$field_id}";
				wp_cache_set( $cache_key, $d, 'bp_xprofile_data' );
			}
		}

		// Now that the cache is primed with all data, fetch it.
		$data = array();
		foreach ( $user_ids as $user_id ) {
			$cache_key = "{$user_id}:{$field_id}";
			$data[]    = wp_cache_get( $cache_key, 'bp_xprofile_data' );
		}

		// Integer casting.
		foreach ( (array) $data as $key => $d ) {
			if ( isset( $data[ $key ]->id ) ) {
				$data[ $key ]->id = (int) $data[ $key ]->id;
			}
			if ( isset( $data[ $key ]->user_id ) ) {
				$data[ $key ]->user_id  = (int) $data[ $key ]->user_id;
			}

			$data[ $key ]->field_id = (int) $data[ $key ]->field_id;
		}

		// If a single ID was passed, just return the value.
		if ( $return_single_result ) {
			return $data[0]->value;

		// Otherwise return the whole array.
		} else {
			return $data;
		}
	}

Top ↑

Changelog Changelog

Changelog
Version Description
8.0.0 Checks if a null field data is an xProfile WP Field.
1.0.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

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