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
Supports multiple user IDs.
Parameters
- $field_id
-
(Required) ID of the field.
- $user_ids
-
(Optional) ID or IDs of user(s).
Default value: null
Return
(string|array) Single value if a single user is queried, otherwise an array of results.
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;
}
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.0.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.