Términos de atributos de productos separados por comas si hay varios valores disponibles
En WooCommerce, actualmente estoy construyendo una función que hará eco de algunos atributos del producto en la página de la tienda. Me gustaría separarlos con comas si hay varios valores de atributo disponibles, pero no sé cómo.
Mi código:
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>';
}
Respuestas
El método WC_Product get_attribute()
proporciona una cadena de valores separados por comas cuando hay más de un valor ... También debe verificar que cada atributo diferente tenga en la lista un término ...
Para obtener el nombre de la etiqueta de atributo del producto, puede utilizar wc_attribute_label()
la función de atributo del producto.
1). Si desea obtener cada atributo de producto con el nombre de la etiqueta y los valores de los términos (cada atributo diferente en una línea), utilizará lo siguiente.
Este código también maneja atributos de productos personalizados :
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). Pero si desea obtener todos los términos de atributos de su producto como una cadena separada por comas, su código será algo así como Mostrar atributos de producto específicos bajo el título del producto en las páginas de archivo de Woocommerce .
Entonces, para tu código:
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>';
}
}
El código va en el archivo functions.php del tema hijo activo (o tema activo). Debería funcionar.
Recopile sus valores en la matriz y luego implode
esta matriz:
$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>';