利用可能な値が複数ある場合は、コンマで区切られた製品属性の用語

Jan 13 2021

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>';
}

回答

2 LoicTheAztec Jan 13 2021 at 22:50

WC_Productメソッドget_attribute()は、複数の値がある場合に値のコンマ区切りの文字列を提供します…また、それぞれの異なる属性がリストに1つの用語を持っていることを確認する必要があります…

商品属性のラベル名を取得するには、商品wc_attribute_label()属性関数を使用できます。

1)。ラベル名と用語値(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)。ただし、すべての商品属性の用語をコンマ区切りの文字列として取得する場合、コードはWoocommerceアーカイブページの商品タイトルの下にある特定の商品属性表示するのようになります

だからあなたのコードのために:

add_action('woocommerce_after_shop_loop_item_title', 'display_loop_product_attributtes', 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ファイルに入ります。動作するはずです。

3 u_mulder Jan 13 2021 at 22:14

値を配列に収集してから、implodeこの配列に収集します。

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

// 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>';