在 WooCommerce 中按属性获取产品[重复]

问题描述 投票:0回答:1

我有很多属性的产品。属性值可以是大小、颜色……。我正在尝试创建自定义搜索,但无法获取提取任何产品的查询。

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

有什么问题

php wordpress woocommerce product taxonomy-terms
1个回答
0
投票

第三个问题是如何使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.