BP_User_Query::get_sql_clause_for_member_types( string|array $member_types, string $operator )
Get a SQL clause representing member_type include/exclusion.
Description
Parameters
- $member_types
-
(Required) Array or comma-separated list of profile types.
- $operator
-
(Required) 'IN' or 'NOT IN'.
Return
(string)
Source
File: bp-core/classes/class-bp-user-query.php
protected function get_sql_clause_for_member_types( $member_types, $operator ) {
global $wpdb;
// Sanitize.
if ( 'NOT IN' !== $operator ) {
$operator = 'IN';
}
// Parse and sanitize types.
if ( ! is_array( $member_types ) ) {
$member_types = preg_split( '/[,\s+]/', $member_types );
}
$types = array();
foreach ( $member_types as $mt ) {
if ( bp_get_member_type_object( $mt ) ) {
$types[] = $mt;
}
}
$tax_query = new WP_Tax_Query( array(
array(
'taxonomy' => bp_get_member_type_tax_name(),
'field' => 'name',
'operator' => $operator,
'terms' => $types,
),
) );
// Switch to the root blog, where profile type taxonomies live.
$site_id = bp_get_taxonomy_term_site_id( bp_get_member_type_tax_name() );
$switched = false;
if ( $site_id !== get_current_blog_id() ) {
switch_to_blog( $site_id );
$switched = true;
}
$sql_clauses = $tax_query->get_sql( 'u', $this->uid_name );
$clause = '';
// The no_results clauses are the same between IN and NOT IN.
if ( false !== strpos( $sql_clauses['where'], '0 = 1' ) ) {
$clause = $this->no_results['where'];
// The tax_query clause generated for NOT IN can be used almost as-is. We just trim the leading 'AND'.
} elseif ( 'NOT IN' === $operator ) {
$clause = preg_replace( '/^\s*AND\s*/', '', $sql_clauses['where'] );
// IN clauses must be converted to a subquery.
} elseif ( preg_match( '/' . $wpdb->term_relationships . '\.term_taxonomy_id IN \([0-9, ]+\)/', $sql_clauses['where'], $matches ) ) {
$clause = "u.{$this->uid_name} IN ( SELECT object_id FROM $wpdb->term_relationships WHERE {$matches[0]} )";
}
if ( $switched ) {
restore_current_blog();
}
return $clause;
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 2.4.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.