如果有多个可用值,则以逗号分隔的产品属性术语

问题描述

在 WooCommerce 中,我目前正在构建一个功能,该功能将在商店页面中回显某些产品属性。如果有多个可用的属性值,我想用逗号分隔它们,但我不知道如何。

我的代码

add_action('woocommerce_after_shop_loop_item_title','TitleVariations',10);
function TitleVariations()
{
global $product;
    
$colormonth = $product->get_attribute('color-month');
$finish = $product->get_attribute('finish');
$design = $product->get_attribute('design');

echo '<span class="variation-display">';
echo __($colormonth,'woocommerce');
echo __($finish,'woocommerce');
echo __($crossdesign,'woocommerce');
echo '</span>';
}

解决方法

收集你的值到数组然后implode这个数组:

$values = [
    __($colormonth,'woocommerce'),__($finish,__($crossdesign,];

// if some values returned by `__()` are empty strings,// you can filter your array so as to remove them
$values = array_filter($values);

echo '<span class="variation-display">';
echo implode(',',$values);
echo '</span>';
,

当有多个值时,WC_Product 方法 get_attribute() 给出一个逗号分隔的值字符串……您还需要检查每个不同的属性是否在列表中都有一个术语……

要获取产品属性标签名称,可以使用wc_attribute_label()产品属性函数。

1)。如果您想使用标签名称和术语值(每个不同的属性在一行中)获取每个产品属性,您将使用以下内容。

此代码还处理自定义产品属性

add_action('woocommerce_after_shop_loop_item_title','display_loop_product_attributtes',10);
function display_loop_product_attributtes()
{
    global $product;
    
    // Here define your product attribute names (slugs)
    $attribute_names = array('color-month','finish','design'); 
    $attributes      = array(); // Initializing
    
    // Loop Through product attributes array
    foreach( $attribute_names as $attribute_name ) {
        if( taxonomy_exists( 'pa_' . $attribute_name )  ) {
            $attribute = 'pa_' . $attribute_name; // Custom taxonomy
        } else {
            $attribute = $attribute_name; // Custom attribute (not a taxonomy)
        }

        $values_str = $product->get_attribute($attribute);

        if ( $values_str ) {
            $attributes[] = '<strong>' . wc_attribute_label($attribute) . ':</strong> ' . $values_str;
        }
    }

    // Output product attribute label / values pairs (one by line)
    if( ! empty( $attributes ) ) { 
        echo '<span class="variation-display">' . implode( '<br>',$attributes ) . '</span>';
    }
}

2)。但是,如果您想以逗号分隔的字符串形式获取所有产品属性术语,您的代码将类似于 Display specific product attributes under product title in Woocommerce archive pages 中的内容。

所以对于您的代码:

add_action('woocommerce_after_shop_loop_item_title',10);
function display_loop_product_attributtes()
{
    global $product;
        
    $color_month = $product->get_attribute('color-month');
    $finish      = $product->get_attribute('finish');
    $design      = $product->get_attribute('design');

    $attributes  = array(); // Initializing
    
    if ( $color_month ) {
        $attributes[] = $color_month;
    }
    if (  $finish ) {
        $attributes[] = $finish;
    }
    if ( $design ) {
        $attributes[] = $design;
    }

    // Output product attribute values
    if( ! empty( $attributes ) ) { 
        echo '<span class="variation-display">' . implode( ',$attributes ) . '</span>';
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。