您需要使用tax_query
,并将‘Compare’替换为‘OPERATOR’,如下所示:
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'handle_pa_brand_product_attribute', 10, 2);
function handle_pa_brand_product_attribute($query, $query_vars)
{
if ( isset($query_vars['brand']) && $query_vars['brand'] === 'EXISTS' ) {
$query['tax_query'][] = array(
'taxonomy' => 'pa_brand',
'operator' => esc_attr($query_vars['brand']),
);
}
return $query;
}
则您的WC_Product_Query将为:
$args = array(
'status' => 'publish',
'type' => 'simple',
'limit' => 50,
'paginate' => true,
'page' => $request['page'],
'brand' => 'EXISTS',
);
$results = wc_get_products($args);
经过测试,效果良好.
Addition: Handling multiple product attributes.
您可以处理多个产品属性(这里我们使用品牌和 colored颜色 ):
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'handle_specific_product_attributes', 10, 2);
function handle_specific_product_attributes($query, $query_vars)
{
// "Brand" with "EXISTS" parametter
if ( isset($query_vars['brand']) && $query_vars['brand'] === 'EXISTS' ) {
$query['tax_query'][] = array(
'taxonomy' => 'pa_brand',
'operator' => esc_attr($query_vars['brand']),
);
}
// "Color" with term "slug" parametter
if ( isset($query_vars['color']) && ! empty($query_vars['color']) ) {
$terms = (array) implode(',', esc_attr($query_vars['color']));
$query['tax_query'][] = array(
'taxonomy' => 'pa_color',
'field' => 'slug',
'terms' => $terms,
);
}
return $query;
}
然后是使用两者的WC_Product_Query的示例:
$args = array(
'status' => 'publish',
'type' => 'simple',
'limit' => 50,
'paginate' => true,
'page' => $request['page'],
'brand' => 'EXISTS',
'color' => 'red,green',
);
$results = wc_get_products($args);