【问题标题】:Add Attributes to Short Description in WooCommerce 3.0+在 WooCommerce 3.0+ 中为简短描述添加属性
【发布时间】:2017-09-17 14:40:07
【问题描述】:

我想将所有产品的属性插入到它们的简短描述中,以便客户可以打开快速查看并检查此属性。

我已经尝试过这个答案:Display specific product attribute values on archives category pages

还有这个:Woocommerce - Display single product attribute(s) with shortcodes in Frontend

而且我无法让它工作。我想应该是因为 WooCommerce 更新到了 3.0+ 版

有人知道制作方法吗?

谢谢

【问题讨论】:

    标签: php wordpress woocommerce attributes product


    【解决方案1】:

    以 LoicTheAztec 的回答为基础:

    仅当您在 WP 后端中的 Products -> Attributes 下预定义了属性时,他的代码才有效。如果您使用在产品页面上设置的单个(自定义)产品属性,wc_get_product_terms() 将不会返回任何内容。您可以通过“pa_”前缀识别预定义属性,它们存储在“woocommerce_attribute_taxonomies”表中。

    为了以与 LoicTheAztec 建议的方式相同的方式显示这些单独的属性,请使用以下代码:

    add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20);
    function custom_attributes_display()
    {
        // Just for product category archive pages
        if(is_product_category())
        {
            global $product;
    
            // get all product attributes
            $attributes = $product->get_attributes();
            // the array of attributes you want to display (shown in same order)
            $show_attributes = array('My Attribute A', 'Another Attribute B');
            foreach($show_attributes as $key => $show_attribute)
            {
                foreach($attributes as $attribute)
                {
                    // check if current attribute is among the ones to be shown
                    if ($attribute->get_name() == $show_attribute)
                    {
                        echo $attribute->get_options()[0];
                        // seperate attributes by "/"
                        if (count($show_attributes) > 1)
                            echo '/';
                        unset($show_attributes[$key]);
                        break;
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      更新 3(简单产品的自动化,WC 兼容性)

      // Compatibility for WC 3+ and automation enhancements
      add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20 );
      function custom_attributes_display(){
          global $product;
      
          // Just for simple products
          if( ! $product->is_type( 'simple' ) ) return;
      
          $loop_count = 0;
      
          echo '<div>';
      
          // Get the attributes taxonomy slugs (Updated and dynamic now)
          $attributes_taxonomy = $product->get_attributes();
          // OR set an indexed array of taxonomy slug (key) and name (value) to chose which ones, like:
          // $attributes_taxonomy = array('pa_nopeus' => 'Nopeus', 'pa_liito' => 'Liito, 'pa_vakaus' => 'Vaukaus' );
      
          foreach( $attributes_taxonomy as $taxonomy => $attribute ) {
      
              // Getting the term names of an attribute (set in a coma separated string if many values)
              $attribute_terms = wp_get_post_terms( get_the_id(), $taxonomy, array( 'fields' => 'names' ) );
              $terms_string = implode( ',', $attribute_terms );
      
              // Displays only if attribute exist for the product
              if( count( $attribute_terms ) > 0 ){ // Updated
                  echo $terms_string;
      
                  // Separating each number by a " | " (Updated and dynamic now)
                  $attr_count = count( $attributes_taxonomy );
                  $loop_count++;
                  if( $loop_count < $attr_count && $attr_count > 1 ) echo ' | ';
              }
          }
      
          echo '</div>';
      }
      

      更新仅适用于 WooCommerce 3.0+ 版。

      // For WooCommerce Version 3.0+ (only)
      add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20 );
      function custom_attributes_display(){
      
          // Just for product category archives pages
          if(is_product_category()){
              global $product;
      
              // the array of attributes names
              $attribute_names = array('pa_nopeus', 'pa_liito', 'pa_vakaus', 'pa_feidi');
              foreach( $attribute_names as $key => $attribute_name ) {
      
                  // For WooCommerce version 3.0+
                  $product_id = $product->get_id(); // WC 3.0+
      
                  // Getting the value of an attribute (OK for WC 3.0+)
                  $wc_term = wc_get_product_terms( $product_id, $attribute_name);
                  $attribute_value = array_shift($wc_term);
      
                  // Displays only if attribute exist for the product
                  if(!empty($attribute_value) || '0' == $attribute_value ){ // Updated
                      echo $attribute_value;
      
                      // Separating each number by a " / "
                      if($key < 3) echo ' / ';
                  }
              }
          }
      }
      

      代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

      现在应该可以在 WC 3.0+ 中使用


      与此答案代码相关:Display specific product attribute values on archives category pages

      【讨论】:

      • 由于我是 php 新手,我使用了一个插件来显示属性:“WooCommerce 显示属性”并且效果很好
      【解决方案3】:

      我试图做几乎相同的事情,并找到了一个单行解决方案,可以帮助像我一样来这里的人。以下代码适用于我。

      WooCommerce 版本:5+

      add_action( 'woocommerce_single_product_summary', 'add_atts_to_summary' );
      
      function add_atts_to_summary() {
          global $product;
          wc_display_product_attributes( $product );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-14
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 2022-11-30
        • 2016-06-12
        • 1970-01-01
        • 2021-07-12
        相关资源
        最近更新 更多