WooCommerce通过属性查询获取产品

16 浏览
0 Comments

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);

我哪里错了?

0
0 Comments

问题出现的原因是因为在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'的产品。

0