ntry' => esc_sql( $parts[0] ), 'state' => esc_sql( $parts[1] ), ); } } else { $countries[] = esc_sql( $location ); } } $conditions = array(); // Build country:state pair conditions. if ( ! empty( $country_state_pairs ) ) { $pair_conditions = array(); foreach ( $country_state_pairs as $pair ) { if ( $is_include ) { $pair_conditions[] = "({$customer_lookup_table}.country = '{$pair['country']}' AND {$customer_lookup_table}.state = '{$pair['state']}')"; } else { $pair_conditions[] = "({$customer_lookup_table}.country != '{$pair['country']}' OR {$customer_lookup_table}.state != '{$pair['state']}')"; } } $pair_connector = $is_include ? ' OR ' : ' AND '; $conditions[] = '(' . implode( $pair_connector, $pair_conditions ) . ')'; } // Build country-only conditions. if ( ! empty( $countries ) ) { $operator = $is_include ? 'IN' : 'NOT IN'; $conditions[] = "{$customer_lookup_table}.country {$operator} ('" . implode( "','", $countries ) . "')"; } if ( empty( $conditions ) ) { return ''; } // Combine conditions with OR for includes, AND for excludes. $connector = $is_include ? ' OR ' : ' AND '; return '(' . implode( $connector, $conditions ) . ')'; } /** * Initialize query objects. */ protected function initialize_queries() { $this->clear_all_clauses(); $table_name = self::get_db_table_name(); $this->subquery = new SqlQuery( $this->context . '_subquery' ); $this->subquery->add_sql_clause( 'from', $table_name ); $this->subquery->add_sql_clause( 'select', "{$table_name}.customer_id" ); $this->subquery->add_sql_clause( 'group_by', "{$table_name}.customer_id" ); } }