Istilah atribut produk yang dipisahkan koma jika ada beberapa nilai yang tersedia
Di WooCommerce, saya sedang membangun fungsi yang akan menampilkan beberapa atribut produk di halaman toko. Saya ingin memisahkan ini dengan koma jika ada beberapa nilai atribut yang tersedia, tetapi saya tidak tahu caranya.
Kode saya:
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>';
}
Jawaban
Metode WC_Product get_attribute()
memberikan string nilai yang dipisahkan koma jika ada lebih dari satu nilai… Anda juga perlu memeriksa bahwa setiap atribut yang berbeda memiliki daftar satu istilah…
Untuk mendapatkan nama label atribut produk, Anda dapat menggunakan wc_attribute_label()
fungsi atribut produk.
1). Jika Anda ingin mendapatkan setiap atribut produk dengan nama label dan istilah nilai (setiap atribut berbeda dalam satu baris), Anda akan menggunakan yang berikut ini.
Kode ini juga menangani atribut produk khusus :
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). Tetapi jika Anda ingin mendapatkan semua istilah atribut produk Anda sebagai string yang dipisahkan koma, kode Anda akan menjadi seperti di Tampilkan atribut produk tertentu di bawah judul produk di halaman arsip Woocommerce .
Jadi untuk kode Anda:
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>';
}
}
Kode masuk ke file functions.php dari tema anak aktif (atau tema aktif). Ini harus berhasil.
Kumpulkan nilai Anda ke array dan kemudian implode
array ini:
$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>';