我有很多属性的产品。属性值可以是大小、颜色……。我正在尝试创建自定义搜索,但无法获取提取任何产品的查询。
$product_attributes = wc_get_attribute_taxonomies();
$attributes = array();
foreach ($product_attributes as $attribute) {
$attribute_name = $attribute->attribute_name;
$attribute_value = isset($params[$attribute_name]) ? $params[$attribute_name] : '';
if (!empty($attribute_value)) {
$attributes['pa_' .$attribute_name] = $attribute_value;
}
}
$ordering = WC()->query->get_catalog_ordering_args();
$ordering['orderby'] = array_shift(explode(' ', $ordering['orderby']));
$ordering['orderby'] = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
dump($attributes);
$args = array(
'status' => 'publish',
'limit' => -1,
'return' => 'ids',
'stock_status' => 'instock',
'visibility' => 'visible',
'paginate' => true,
'orderby' => $ordering['orderby'],
'order' => 'DESC',
'attribute' => $attributes,
);
$products = wc_get_products($args);
有什么问题
第三个问题是如何使用
wc_get_products()
函数,该函数不直接支持按照您构造的方式按属性进行搜索。
要根据自定义属性搜索产品,您需要在
tax_query
数组中使用 args
注意:woocommerce attr 存储为自定义分类法,例如 ('pa_size', 'pa_color')
更新代码
$product_attributes = wc_get_attribute_taxonomies();
$tax_query = array('relation' => 'AND');
foreach ($product_attributes as $attribute) {
$attribute_name = $attribute->attribute_name;
$attribute_value = isset($params[$attribute_name]) ? $params[$attribute_name] : '';
if (!empty($attribute_value)) {
$tax_query[] = array(
'taxonomy' => 'pa_' . $attribute_name,
'field' => 'slug',
'terms' => $attribute_value,
);
}
}
$ordering = WC()->query->get_catalog_ordering_args();
$ordering['orderby'] = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
$args = array(
'status' => 'publish',
'limit' => -1,
'return' => 'ids',
'stock_status' => 'instock',
'visibility' => 'visible',
'paginate' => true,
'orderby' => $ordering['orderby'],
'order' => 'DESC',
'tax_query' => $tax_query,
);
$products = wc_get_products($args);
// Debug
dump($products);