php - Agregar atributos a la descripción breve en WooCommerce 3.0+
wordpress attributes (3)
para construir de la respuesta de LoicTheAztec:
Su código solo funciona si ha predefinido los atributos en el back-end de WP en Productos -> Atributos. Si trabaja con atributos de productos individuales (personalizados) que configura en la página del producto, wc_get_product_terms () no devolverá nada. Puede reconocer atributos predefinidos por el prefijo "pa_", se almacenan en la tabla "woocommerce_attribute_taxonomies".
Para mostrar estos atributos individuales de la misma manera que lo sugirió LoicTheAztec, use este código:
add_action( ''woocommerce_shop_loop_item_title'', ''custom_attributes_display'', 20);
function custom_attributes_display()
{
// Just for product category archive pages
if(is_product_category())
{
global $product;
// get all product attributes
$attributes = $product->get_attributes();
// the array of attributes you want to display (shown in same order)
$show_attributes = array(''My Attribute A'', ''Another Attribute B'');
foreach($show_attributes as $key => $show_attribute)
{
foreach($attributes as $attribute)
{
// check if current attribute is among the ones to be shown
if ($attribute->get_name() == $show_attribute)
{
echo $attribute->get_options()[0];
// seperate attributes by "/"
if (count($show_attributes) > 1)
echo ''/'';
unset($show_attributes[$key]);
break;
}
}
}
}
}
Me gustaría insertar los atributos de todos los productos en su breve descripción, para que el cliente pueda abrir una vista rápida y verificar estos atributos.
Ya probé esta respuesta: Mostrar valores de atributos de productos específicos en páginas de categoría de archivos
También este: Woocommerce : muestra atributos de producto único con códigos abreviados en Frontend
Y no pude hacer que funcione. Creo que debería ser porque WooCommerce se actualizó a la versión 3.0+
¿Alguien sabe una manera de hacerlo?
Gracias
Actualización 3 (Automatización para productos simples, compatibilidad de WC)
// Compatibility for WC 3+ and automation enhancements
add_action( ''woocommerce_shop_loop_item_title'', ''custom_attributes_display'', 20 );
function custom_attributes_display(){
global $product;
// Just for simple products
if( ! $product->is_type( ''simple'' ) ) return;
$loop_count = 0;
echo ''<div>'';
// Get the attributes taxonomy slugs (Updated and dynamic now)
$attributes_taxonomy = $product->get_attributes();
// OR set an indexed array of taxonomy slug (key) and name (value) to chose which ones, like:
// $attributes_taxonomy = array(''pa_nopeus'' => ''Nopeus'', ''pa_liito'' => ''Liito, ''pa_vakaus'' => ''Vaukaus'' );
foreach( $attributes_taxonomy as $taxonomy => $attribute ) {
// Getting the term names of an attribute (set in a coma separated string if many values)
$attribute_terms = wp_get_post_terms( get_the_id(), $taxonomy, array( ''fields'' => ''names'' ) );
$terms_string = implode( '','', $attribute_terms );
// Displays only if attribute exist for the product
if( count( $attribute_terms ) > 0 ){ // Updated
echo $terms_string;
// Separating each number by a " | " (Updated and dynamic now)
$attr_count = count( $attributes_taxonomy );
$loop_count++;
if( $loop_count < $attr_count && $attr_count > 1 ) echo '' | '';
}
}
echo ''</div>'';
}
Actualización solo para WooCommerce versión 3.0+.
// For WooCommerce Version 3.0+ (only)
add_action( ''woocommerce_shop_loop_item_title'', ''custom_attributes_display'', 20 );
function custom_attributes_display(){
// Just for product category archives pages
if(is_product_category()){
global $product;
// the array of attributes names
$attribute_names = array(''pa_nopeus'', ''pa_liito'', ''pa_vakaus'', ''pa_feidi'');
foreach( $attribute_names as $key => $attribute_name ) {
// For WooCommerce version 3.0+
$product_id = $product->get_id(); // WC 3.0+
// Getting the value of an attribute (OK for WC 3.0+)
$wc_term = wc_get_product_terms( $product_id, $attribute_name);
$attribute_value = array_shift($wc_term);
// Displays only if attribute exist for the product
if(!empty($attribute_value) || ''0'' == $attribute_value ){ // Updated
echo $attribute_value;
// Separating each number by a " / "
if($key < 3) echo '' / '';
}
}
}
}
El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.
Debería funcionar ahora en WC 3.0+
Relacionado con este código de respuesta: muestra los valores de atributos de productos específicos en las páginas de categoría de archivos
¿Cómo puedo mostrar la etiqueta de atributo con este código?
// Compatibilidad para WC 3+ y mejoras de automatización add_action (''woocommerce_shop_loop_item_title'', ''custom_attributes_display'', 20); función custom_attributes_display () {global $ product;
// Just for simple products
if( ! $product->is_type( ''simple'' ) ) return;
$loop_count = 0;
echo ''<div>'';
// Get the attributes taxonomy slugs (Updated and dynamic now)
$attributes_taxonomy = $product->get_attributes();
// OR set an indexed array of taxonomy slug (key) and name (value) to chose which ones, like:
// $attributes_taxonomy = array(''pa_nopeus'' => ''Nopeus'', ''pa_liito'' => ''Liito, ''pa_vakaus'' => ''Vaukaus'' );
foreach( $attributes_taxonomy as $taxonomy => $attribute ) {
// Getting the term names of an attribute (set in a coma separated string if many values)
$attribute_terms = wp_get_post_terms( get_the_id(), $taxonomy, array( ''fields'' => ''names'' ) );
$terms_string = implode( '','', $attribute_terms );
// Displays only if attribute exist for the product
if( count( $attribute_terms ) > 0 ){ // Updated
echo $terms_string;
// Separating each number by a " | " (Updated and dynamic now)
$attr_count = count( $attributes_taxonomy );
$loop_count++;
if( $loop_count < $attr_count && $attr_count > 1 ) echo '' | '';
}
}
echo ''</div>'';
}