bp_xprofile_bp_user_query_search( array $sql, BP_User_Query $query )
When search_terms are passed to BP_User_Query, search against xprofile fields.
Description
Parameters
- $sql
-
(Required) Clauses in the user_id SQL query.
- $query
-
(Required) User query object.
Return
(array)
Source
File: bp-xprofile/bp-xprofile-functions.php
function bp_xprofile_bp_user_query_search( $sql, BP_User_Query $query ) { global $wpdb; if ( empty( $query->query_vars['search_terms'] ) || empty( $sql['where']['search'] ) ) { return $sql; } $bp = buddypress(); $search_terms_clean = bp_esc_like( wp_kses_normalize_entities( $query->query_vars['search_terms'] ) ); if ( $query->query_vars['search_wildcard'] === 'left' ) { $search_terms_nospace = '%' . $search_terms_clean; $search_terms_space = '%' . $search_terms_clean . ' %'; } elseif ( $query->query_vars['search_wildcard'] === 'right' ) { $search_terms_nospace = $search_terms_clean . '%'; $search_terms_space = '% ' . $search_terms_clean . '%'; } else { $search_terms_nospace = '%' . $search_terms_clean . '%'; $search_terms_space = '%' . $search_terms_clean . '%'; } // Combine the core search (against wp_users) into a single OR clause // with the xprofile_data search. $matched_user_ids = $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE %s OR value LIKE %s", $search_terms_nospace, $search_terms_space ) ); // Checked profile fields based on privacy settings of particular user while searching if ( ! empty( $matched_user_ids ) ) { $matched_user_data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_data} WHERE value LIKE %s OR value LIKE %s", $search_terms_nospace, $search_terms_space ) ); foreach ( $matched_user_data as $key => $user ) { $field_visibility = xprofile_get_field_visibility_level( $user->field_id, $user->user_id ); if ( 'adminsonly' === $field_visibility && !current_user_can('administrator') ) { if (($key = array_search($user->user_id, $matched_user_ids)) !== false) { unset($matched_user_ids[$key]); } } if ( 'friends' === $field_visibility && !current_user_can('administrator') && false === friends_check_friendship( intval($user->user_id), bp_loggedin_user_id() ) ) { if (($key = array_search($user->user_id, $matched_user_ids)) !== false) { unset($matched_user_ids[$key]); } } } } if ( ! empty( $matched_user_ids ) ) { $search_core = $sql['where']['search']; $search_combined = " ( u.{$query->uid_name} IN (" . implode(',', $matched_user_ids) . ") OR {$search_core} )"; $sql['where']['search'] = $search_combined; } return $sql; }
Changelog
Version | Description |
---|---|
BuddyPress 2.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.