Birden çok değer varsa virgülle ayrılmış ürün özelliği terimleri

Jan 13 2021

WooCommerce'da, şu anda mağaza sayfasında bazı ürün özelliklerini yansıtan bir işlev oluşturuyorum. Birden fazla öznitelik değeri varsa bunları virgülle ayırmak istiyorum, ancak nasıl yapılacağını bilmiyorum.

Kodum:

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

Yanıtlar

2 LoicTheAztec Jan 13 2021 at 22:50

WC_Product yöntemi get_attribute(), birden fazla değer olduğunda virgülle ayrılmış değerler dizisi verir… Ayrıca her farklı özniteliğin listede bir terim olup olmadığını kontrol etmeniz gerekir…

Ürün özniteliği etiket adını almak için wc_attribute_label()ürün özniteliği işlevini kullanabilirsiniz .

1). Her bir ürün özelliğini etiket adı ve terim (ler) değer (ler) i (her biri bir satırdaki farklı özellik) ile almak istiyorsanız, bunun yerine aşağıdakini kullanacaksınız.

Bu kod aynı zamanda özel ürün özelliklerini de işler :

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). Ancak, tüm ürün özellikleri terimlerinizi virgülle ayrılmış bir dize olarak almak istiyorsanız, kodunuz, Woocommerce arşiv sayfalarında ürün başlığı altında belirli ürün özelliklerini görüntüleyin gibi bir şey olacaktır .

Yani kodunuz için:

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

Kod, aktif alt temanın (veya aktif temanın) functions.php dosyasına girer. Çalışmalı.

3 u_mulder Jan 13 2021 at 22:14

Değerlerinizi diziye ve ardından implodebu diziye toplayın :

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