WC_Query::get_tax_query
Appends tax queries to an array.
Method of the class: WC_Query{}
Hooks from the method
Returns
Array.
Usage
$WC_Query = new WC_Query(); $WC_Query->get_tax_query( $tax_query, $main_query );
- $tax_query(array)
- Tax query.
Default:array() - $main_query(true|false)
- If is main query.
Default:false
WC_Query::get_tax_query() WC Query::get tax query code WC 10.7.0
public function get_tax_query( $tax_query = array(), $main_query = false ) {
if ( ! is_array( $tax_query ) ) {
$tax_query = array(
'relation' => 'AND',
);
}
if ( $main_query && ! $this->filterer->filtering_via_lookup_table_is_active() ) {
// Layered nav filters on terms.
foreach ( self::get_layered_nav_chosen_attributes() as $taxonomy => $data ) {
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $data['terms'],
'operator' => 'and' === $data['query_type'] ? 'AND' : 'IN',
'include_children' => false,
);
}
}
$product_visibility_terms = wc_get_product_visibility_term_ids();
$product_visibility_not_in = array( is_search() && $main_query ? $product_visibility_terms['exclude-from-search'] : $product_visibility_terms['exclude-from-catalog'] );
// Hide out of stock products.
if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
$product_visibility_not_in[] = $product_visibility_terms[ ProductStockStatus::OUT_OF_STOCK ];
}
// phpcs:disable WordPress.Security.NonceVerification.Recommended
// Filter by rating.
if ( isset( $_GET['rating_filter'] ) ) {
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$rating_filter = array_filter( array_map( 'absint', explode( ',', wp_unslash( $_GET['rating_filter'] ) ) ) );
$rating_terms = array();
for ( $i = 1; $i <= 5; $i++ ) {
if ( in_array( $i, $rating_filter, true ) && isset( $product_visibility_terms[ 'rated-' . $i ] ) ) {
$rating_terms[] = $product_visibility_terms[ 'rated-' . $i ];
}
}
if ( ! empty( $rating_terms ) ) {
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'term_taxonomy_id',
'terms' => $rating_terms,
'operator' => 'IN',
'rating_filter' => true,
);
}
}
// phpcs:enable WordPress.Security.NonceVerification.Recommended
if ( ! empty( $product_visibility_not_in ) ) {
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'term_taxonomy_id',
'terms' => $product_visibility_not_in,
'operator' => 'NOT IN',
);
}
return array_filter( apply_filters( 'woocommerce_product_query_tax_query', $tax_query, $this ) );
}