WooCommerce通过属性查询获取产品
WooCommerce通过属性查询获取产品
我有一个带有属性颜色的产品。属性值包括红色、蓝色和绿色。我想创建一个自定义搜索,但是无法获取查询结果。
$args = 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' => 'product',
'field' => 'slug',
'terms' => array('blue', 'red', 'green'),
'operator' => 'IN',
),
)
);
$products = new WP_Query($args);
我哪里错了?
问题出现的原因是因为在WooCommerce 3版本之后,产品的可见性由自定义分类法"product_visibility"来处理,而不再使用"meta_query"来排除隐藏的产品。解决方法是使用"tax_query"来进行查询,具体方法可以参考这个链接:wordpress.stackexchange.com/questions/231118/…。
所以正确的查询代码应该是:
// 查询 $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', ) ) ) ); // 循环输出结果 if ( $products->have_posts() ): while ( $products->have_posts() ): $products->the_post(); $product_ids[] = $products->post->ID; endwhile; wp_reset_postdata(); endif; // 输出产品ID print_r($product_ids);
这段代码经过测试是正确的,你将会得到所有具有颜色属性为'blue'、'red'和'green'的产品。