Bp_Search_Members::sql( string $search_term, boolean $only_totalrow_count = false )
Generates sql for members search.
Description
Parameters
- $search_term
-
(Required)
- $only_totalrow_count
-
(Optional)
Default value: false
Return
(string) sql query
Source
File: bp-search/classes/class-bp-search-members.php
public function sql( $search_term, $only_totalrow_count=false ){ global $wpdb, $bp; $bp_prefix = bp_core_get_table_prefix(); $query_placeholder = array(); $COLUMNS = " SELECT "; if( $only_totalrow_count ){ $COLUMNS .= " COUNT( DISTINCT u.id ) "; } else { $COLUMNS .= " DISTINCT u.id, 'members' as type, u.display_name LIKE %s AS relevance, a.date_recorded as entry_date "; $query_placeholder[] = '%'. $search_term .'%'; } $FROM = " {$wpdb->users} u LEFT JOIN {$bp->members->table_name_last_activity} a ON a.user_id=u.id AND a.component = 'members' AND a.type = 'last_activity'"; $WHERE = array(); $WHERE[] = "1=1"; $WHERE[] = "u.user_status = 0"; $where_fields = array(); /* ++++++++++++++++++++++++++++++++ * wp_users table fields +++++++++++++++++++++++++++++++ */ $user_fields = bp_get_search_user_fields(); if ( ! empty( $user_fields ) ) { $conditions_wp_user_table = array(); foreach ( $user_fields as $user_field => $field_label ) { if ( ! bp_is_search_user_field_enable( $user_field ) ) { continue; } if ( 'user_meta' === $user_field ) { //Search in user meta table for terms $conditions_wp_user_table[] = " ID IN ( SELECT user_id FROM {$wpdb->usermeta} WHERE {$bp_prefix}bp_strip_tags(meta_value) LIKE %s ) "; $query_placeholder[] = '%' . $search_term . '%'; } else { $conditions_wp_user_table[] = $user_field . " LIKE %s "; $query_placeholder[] = '%' . $search_term . '%'; } } if ( ! empty( $conditions_wp_user_table ) ) { $clause_wp_user_table = "u.id IN ( SELECT ID FROM {$wpdb->users} WHERE ( "; $clause_wp_user_table .= implode( ' OR ', $conditions_wp_user_table ); $clause_wp_user_table .= " ) ) "; $where_fields[] = $clause_wp_user_table; } } /* _____________________________ */ /* ++++++++++++++++++++++++++++++++ * xprofile fields +++++++++++++++++++++++++++++++ */ //get all selected xprofile fields if( function_exists( 'bp_is_active' ) && bp_is_active( 'xprofile' ) ){ $groups = bp_xprofile_get_groups( array( 'fetch_fields' => true ) ); if ( !empty( $groups ) ){ $selected_xprofile_fields = array( 'word_search' => array(0), //Search for whole word in field of type checkbox and radio 'char_search' => array(0), //Search for character in field of type textbox, textarea and etc ); $word_search_field_type = array( 'radio', 'checkbox' ); foreach ( $groups as $group ){ if ( !empty( $group->fields ) ){ foreach ( $group->fields as $field ) { if ( bp_is_search_xprofile_enable( $field->id ) ) { if( in_array( $field->type, $word_search_field_type ) ) { $selected_xprofile_fields['word_search'][] = $field->id; } else { $selected_xprofile_fields['char_search'][] = $field->id; } } } } } if( !empty( $selected_xprofile_fields ) ){ //u.id IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE %s ) $clause_xprofile_table = "u.id IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE ( {$bp_prefix}bp_strip_tags(value) LIKE %s AND field_id IN ( "; $clause_xprofile_table .= implode( ',', $selected_xprofile_fields['char_search'] ); $clause_xprofile_table .= ") ) OR ( value REGEXP '[[:<:]]{$search_term}[[:>:]]' AND field_id IN ( "; $clause_xprofile_table .= implode( ',', $selected_xprofile_fields['word_search'] ); $clause_xprofile_table .= ") ) ) "; $where_fields[] = $clause_xprofile_table; $query_placeholder[] = '%'. $search_term .'%'; } } } /* _____________________________ */ /* ++++++++++++++++++++++++++++++++ * Search from search string +++++++++++++++++++++++++++++++ */ $split_search_term = explode(' ', $search_term); if (count($split_search_term) > 1 ) { $clause_search_string_table = "u.id IN ( SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'bbgs_search_string' AND ("; foreach ( $split_search_term as $k => $sterm ) { if ( $k == 0 ) { $clause_search_string_table .= " meta_value LIKE %s "; $query_placeholder[] = '%'. $sterm .'%'; } else { $clause_search_string_table .= " OR meta_value LIKE %s "; $query_placeholder[] = '%'. $sterm .'%'; } } $clause_search_string_table .= ") ) "; $where_fields[] = $clause_search_string_table; } /* _____________________________ */ if( !empty( $where_fields ) ) $WHERE[] = '(' . implode ( ' OR ', $where_fields ) . ')'; // other conditions // $WHERE[] = " a.component = 'members' "; // $WHERE[] = " a.type = 'last_activity' "; $sql = $COLUMNS . ' FROM ' . $FROM . ' WHERE ' . implode( ' AND ', $WHERE ); if( !$only_totalrow_count ){ $sql .= " GROUP BY u.id "; } $sql = $wpdb->prepare( $sql, $query_placeholder ); return apply_filters( 'Bp_Search_Members_sql', $sql, array( 'search_term' => $search_term, 'only_totalrow_count' => $only_totalrow_count, ) ); }
Changelog
Version | Description |
---|---|
BuddyBoss 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.