เงื่อนไขแอตทริบิวต์ผลิตภัณฑ์ที่คั่นด้วยจุลภาคหากมีหลายค่า

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()ให้สตริงค่าที่คั่นด้วยเครื่องหมายจุลภาคเมื่อมีมากกว่าหนึ่งค่า ... คุณต้องตรวจสอบด้วยว่าแอตทริบิวต์ที่แตกต่างกันแต่ละรายการมีอยู่ในรายการหนึ่งคำ ...

หากต้องการทราบชื่อป้ายแอตทริบิวต์ผลิตภัณฑ์คุณสามารถใช้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). แต่ถ้าคุณต้องการที่จะได้รับทุกผลิตภัณฑ์ของคุณคุณลักษณะแง่เป็นจุลภาคคั่นสตริงโค้ดของคุณจะเป็นสิ่งที่ชอบในผลิตภัณฑ์เฉพาะการแสดงแอตทริบิวต์ภายใต้ชื่อสินค้าใน 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>';