เงื่อนไขแอตทริบิวต์ผลิตภัณฑ์ที่คั่นด้วยจุลภาคหากมีหลายค่า
ใน 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>';
}
คำตอบ
เมธอด 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 ของธีมลูกที่ใช้งานอยู่ (หรือธีมที่ใช้งานอยู่) มันควรจะทำงาน
รวบรวมค่าของคุณไปยังอาร์เรย์จากนั้น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>';