在Woocommerce单个产品页面中的产品标题下方显示属性

时间:2020-10-27 14:40:06

标签: wordpress woocommerce product custom-taxonomy taxonomy-terms

我想在WooCommerce单个产品页面上的产品标题下方显示特定的产品属性,如下所示:

产品标题

标签| SKU

类型|样式

年份|格式|发布类型

其中标签,流派,样式,年份,格式,发行类型是具有多个可能值的属性,SKU是内部产品SKU, | -分隔符。

我正尝试根据this example通过以下代码获取特定属性,但对我而言不起作用。

/**
* Show specified WooCommerce product attributes below the title on single product page.
*/
function wc_get_specific_pa(){
  
    // Titles of the attributes I want to display
    $desired_atts = array( 'record-label', 'genre', 'style', 'format', 'release-date', 'release-type');
 
    // sanitize attributes into taxonomy slugs
    foreach ( $desired_atts as $att ) {
      $tax_slugs[] = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '_', $att)));
    }
     
    global $product;
    $attributes = $product->get_attributes();
     
    if ( ! $attributes ) {
        return;
    }
      
    $out = '';
   
    foreach ( $attributes as $attribute ) {
        $name = $attribute->get_name();
          
        if ( $attribute->is_taxonomy() ) {
          
            $clean_name = $attribute['name'];
            // Trim pa_ prefix
            if ( 0 === strpos( $clean_name, 'pa_' ) ) {
              $clean_name = substr( $clean_name, 3 );
            }
             
            // get value and label
             
            if ( in_array( $clean_name, array( $tax_slugs ) ) ) {
              
                $terms = wp_get_post_terms( $product->get_id(), $name, 'all' );
                // get the taxonomy
                $tax = $terms[0]->taxonomy;
                // get the tax object
                $tax_object = get_taxonomy( $tax );
                // get tax label
                if ( isset ( $tax_object->labels->singular_name ) ) {
                    $tax_label = $tax_object->labels->singular_name;
                } elseif ( isset( $tax_object->label ) ) {
                    $tax_label = $tax_object->label;
                    // Trim label prefix since WC 3.0
                    if ( 0 === strpos( $tax_label, 'Product ' ) ) {
                       $tax_label = substr( $tax_label, 8 );
                    }
                }
 
                $out .= $tax_label . ': ';
                $tax_terms = array();
                foreach ( $terms as $term ) {
                    $single_term = esc_html( $term->name );
                    array_push( $tax_terms, $single_term );
                }
                $out .= implode(', ', $tax_terms) .  '<br />';
              
            } // our desired att
              
        } else {
          
            // for atts which are NOT registered as taxonomies
              
            // if this is desired att, get value and label
            if ( in_array( $name, array( $desired_atts ) ) ) {
                $out .= $name . ': ';
                $out .= esc_html( implode( ', ', $attribute->get_options() ) ) . '<br />';
            }
        }
      
    }
      
    echo $out;
}
add_action('woocommerce_single_product_summary', 'wc_get_specific_pa');

我是一名编码新手,但如果我理解正确,那么在设法完成“属性代码”工作后,我需要添加 get_sku 函数,然后根据需要调整其显示方式代码中的 $ out 变量。正确吗?

非常感谢您的帮助!

0 个答案:

没有答案