BP_Groups_Group::get_sql_clause_for_group_types( string|array $group_types, string $operator )
Get SQL clause for group type(s).
Description
Parameters
- $group_types
-
(string|array) (Required) Group type(s).
- $operator
-
(string) (Required) 'IN' or 'NOT IN'.
Return
(string) $clause SQL clause.
Source
File: bp-groups/classes/class-bp-groups-group.php
protected static function get_sql_clause_for_group_types( $group_types, $operator ) { global $wpdb; // Sanitize operator. if ( 'NOT IN' !== $operator ) { $operator = 'IN'; } // Parse and sanitize types. if ( ! is_array( $group_types ) ) { $group_types = preg_split( '/[,\s+]/', $group_types ); } $types = array(); foreach ( $group_types as $gt ) { if ( bp_groups_get_group_type_object( $gt ) ) { $types[] = $gt; } } $tax_query = new WP_Tax_Query( array( array( 'taxonomy' => 'bp_group_type', 'field' => 'name', 'operator' => $operator, 'terms' => $types, ), ) ); $site_id = bp_get_taxonomy_term_site_id( 'bp_group_type' ); $switched = false; if ( $site_id !== get_current_blog_id() ) { switch_to_blog( $site_id ); $switched = true; } $sql_clauses = $tax_query->get_sql( 'g', 'id' ); $clause = ''; // The no_results clauses are the same between IN and NOT IN. if ( false !== strpos( $sql_clauses['where'], '0 = 1' ) ) { $clause = self::strip_leading_and( $sql_clauses['where'] ); // The tax_query clause generated for NOT IN can be used almost as-is. } elseif ( 'NOT IN' === $operator ) { $clause = self::strip_leading_and( $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 = " g.id IN ( SELECT object_id FROM $wpdb->term_relationships WHERE {$matches[0]} )"; } if ( $switched ) { restore_current_blog(); } return $clause; }
Changelog
Version | Description |
---|---|
BuddyPress 2.6.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.