查询以根据WooCommerce中选择的产品类别获取属性?

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

我需要实现自定义功能,例如“按属性过滤产品”小部件在woocommerce中有效。

例如,在“产品类别”页面中:在类似于服装的父类别中,它会加载所有属性过滤器(pa_color和pa_size)。

enter image description here

现在,当您检查该父类别的子类别时,即Hoodies。它被过滤并仅加载相关属性(pa_color)。

enter image description here

请提出查询以达到此要求。

wordpress woocommerce filter categories product
1个回答
0
投票

这是我按照要求获取数据的方式:

        $filter_raw = array(); 
        $attrs_raw  = wc_get_attribute_taxonomy_names(); // Getting data of attributes assign in backend.
        $cat_name = get_term($request['category'], 'product_cat', ARRAY_A ); //Category data by category ID.
        $args = array(
            'category'  => array($cat_name['slug'] )
        );

        foreach( wc_get_products($args) as $product ){
            foreach( $product->get_attributes() as $attr_name => $attr ){
            $filter_raw[] = $attr_name;
            if(is_array($attr->get_terms())){    
                foreach( $attr->get_terms() as $term ){
                    $terms_raw[] = $term->name;
                }
            }
            }
        }
        $filters = array_unique(array_intersect((array)$filter_raw,(array)$attrs_raw)); //Filtering the attributes used by products in particular category
        if(is_array($filters)){    
        foreach ( $filters as $filter ){
            $terms = get_terms( $filter );
            if ( ! empty( $terms ) ) {

                $return['items'][ $filter ] = array(
                    'id'    => $filter,
                    'type'  => 'checkbox',
                    'label' => $this->decode_html( wc_attribute_label( $filter ) ),
                );
                foreach ( $terms as $term ) {
                    if(in_array($term->name,$terms_raw)){ //Filtering the terms from attribute used by the products in a category and showing required result.
                    $return['items'][ $filter ]['values'][] = array(
                        'label' => $this->decode_html( $term->name ),
                        'value' => $term->slug,
                    );
                    }
                }
            }
        }
        }
        print_r($return);
© www.soinside.com 2019 - 2024. All rights reserved.