首页 > 解决方案 > Woocommerce:在产品类别名称下列出某些产品属性值

问题描述

我们有一家自行车零件的 woocommerce 商店。我们的父类别名称是“Motorcycle-Parts”。子类别是摩托车品牌,例如:

Motorcycle-Parts
      => Suzuki
      => Honda
      => Yamaha
      ...

在子类别中,我们有产品。这些产品有一个名为“ccm”的属性(它的立方容量,带有数值)。

现在我们尝试在类别名称下方列出每个类别的产品中所有现有的“ccm”值,例如:

Motorcycle-Parts
      => Suzuki 
          - 300
          - 380  
          - 550   
          - ...   
      => Honda
          - 600
          - 650  
          - 700   
          - ...  
      => Yamaha
          - 420
          - 650  
          - 860   
          - ...  

因此,例如,如果产品在类别“Suzuki”中,属性为 pa_ccm(例如 500),我们希望在类别名称下方自动列出该值(500),以便人们看到,在类别 Suzuki one(或更多)存在 pa_ccm 值为 500 的产品。

我用 _get_term_hierarchy 尝试了一些东西,但我的技能在这里有限。所以没有结果。感谢您的帮助和想法。

标签: wordpresswoocommerce

解决方案


您可能必须循环每个类别、每个产品、每个属性,然后是每个术语,以获得所需的结构。为清楚起见,我将离开父子类别部分并呈现如下代码的其余部分:

//  Get all categories

  $args = array(
         'taxonomy'     => 'product_cat',
         'orderby'      => 'name'
  );
 $all_categories = get_categories($args); //all categories are stored here.
 
 foreach ($all_categories as $cat) {
 
 echo "Category: " .$cat->name ."<br>";
 
     $product_args = array(
        'category'  => $cat->slug;
    );
    
    //get products for each category
    
    foreach( wc_get_products($product_args) as $product ) {
    
    //get attributes for each product
    
        foreach( $product->get_attributes('pa_ccm') as $attr_name => $attr ){
        
        //get terms for each attribute

            foreach( $attr->get_terms() as $term ){

            echo "CCM: " .$term->name ."<br>";
        }

    }
}
}

推荐阅读