I have a product with attribute colors. Attribute values are red, blue and green. I am trying to create a custom search but I can\'t get the query to pull any product.
The correct taxonomy for the product attribute color is 'pa_color'
, so the correct working query is:
// The query
$products = new WP_Query( array(
'post_type' => array('product'),
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array( array(
'key' => '_visibility',
'value' => array('catalog', 'visible'),
'compare' => 'IN',
) ),
'tax_query' => array( array(
'taxonomy' => 'pa_color',
'field' => 'slug',
'terms' => array('blue', 'red', 'green'),
'operator' => 'IN',
) )
) );
// The Loop
if ( $products->have_posts() ): while ( $products->have_posts() ):
$products->the_post();
$product_ids[] = $products->post->ID;
endwhile;
wp_reset_postdata();
endif;
// TEST: Output the Products IDs
print_r($product_ids);
This code is tested and works. You will get all products that have Color attribute with the values (terms) 'blue', 'red' and 'green'…
Since WooCommerce 3, product visibility is handled by custom taxonomy
product_visibility
. You can see the following related threads:
- Database changes for products in woocommerce 3
- Get products which are visible in catalog in a WP_query on Woocommerce