Cómo mostrar los nombres de las etiquetas de productos de WooCommerce en la página de inicio y páginas de categorías
Estoy tratando de mostrar las etiquetas de productos de WooCommerce en la página de inicio y páginas de categorías. Junto con el título del producto, el tema debería mostrar las etiquetas en orden alfabético, separadas por un "·".
Por ejemplo: Etiqueta 1 · Etiqueta 2 · Etiqueta 3
Esto es lo que tengo por el momento:
<?php echo get_the_tag_list('<span class="woocommerce-display-tag">Etiquetas: ',' · ','</span>');?>
La salida está en blanco.
¿Cómo puedo hacer que esto funcione?
Para mostrar las etiquetas de productos de WooCommerce, debes usar la función específica de WooCommerce. Aquí está la solución correcta:
<?php
$terms = get_the_terms(get_the_ID(), 'product_tag');
if ($terms && !is_wp_error($terms)) {
// Ordenar las etiquetas alfabéticamente
usort($terms, function($a, $b) {
return strcmp($a->name, $b->name);
});
echo '<span class="woocommerce-display-tag">Etiquetas: ';
$tags = array();
foreach ($terms as $term) {
$tags[] = $term->name;
}
echo implode(' · ', $tags);
echo '</span>';
}
?>

Creo que get_the_tag_list
solo se usa para las etiquetas predeterminadas de WordPress. Las etiquetas de productos de WooCommerce son una taxonomía personalizada llamada product_tag
. Por lo tanto, no puedes usar esta función para devolver estas etiquetas. (por favor, corríjanme si estoy equivocado aquí).
En su lugar, podrías usar la función get_the_terms()
de WordPress para obtener un resultado "similar".
Básico:
// obtener product_tags del producto actual
$current_tags = get_the_terms( get_the_ID(), 'product_tag' );
// solo comenzar si tenemos algunas etiquetas
if ( $current_tags && ! is_wp_error( $current_tags ) ) {
// crear una lista para contener nuestras etiquetas
echo '<ul class="product_tags">';
// para cada etiqueta creamos un elemento de lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nombre de la etiqueta
$tag_link = get_term_link( $tag );// enlace del archivo de la etiqueta
echo '<li><a href="'.$tag_link.'">'.$tag_title.'</a></li>';
}
echo '</ul>';
}
Si deseas usar un separador especial y demás, tendrás que ajustarlo.
Actualización para separadores:
Tienes algunas opciones sobre cómo quieres eliminar el último separador o lidiar con los separadores en general aquí.
El primer método es usar solo CSS. Para esto, primero envolvemos cada $tag_title
en un elemento HTML (aquí un <span>
). Hacemos esto para poder apuntar a cada título.
// para cada etiqueta creamos un elemento de lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nombre de la etiqueta
echo '<span>'.$tag_title.'</span>';
}
Luego simplemente agregamos 2 nuevos estilos CSS (usando tu marcado):
/* agregar " · " después de cada elemento span dentro de .woocommerce-Price-amount */
.woocommerce-Price-amount span:after { content: " · "; }
/* establecer el contenido a nada/eliminar " · " en el último elemento span */
.woocommerce-Price-amount span:last-child:after { content: ""; }
También puedes agregar un separador vía PHP.
Para esto, primero necesitamos obtener un nuevo arreglo de todas las claves de nuestro arreglo $current_tags
. Luego buscamos la última clave encontrada en este nuevo arreglo. Después de esto, usamos un foreach loop
y en ese comparamos la clave actual con la última clave encontrada. Si estas dos son iguales, sabemos que tenemos el último elemento.
Cambia tu función if
:
// solo comenzar si tenemos algunas etiquetas
if ( $current_tags && ! is_wp_error( $current_tags ) ) {
// crear una lista para contener nuestras etiquetas
echo '<span class="woocommerce-Price-amount amount">';
// obtener todas las claves del arreglo $current_tags
$get_keys = array_keys($current_tags);
// obtener la última clave de nuestras claves
$last_key = array_pop($get_keys);
// para cada etiqueta creamos un elemento de lista
foreach ($current_tags as $key => $value) {
$tag_title = $value->name; // nombre de la etiqueta
if($key == $last_key) {
echo $tag_title;
} else {
echo $tag_title.' · ';
}
}
echo '</span>';
}
P.D. ¡Revisa tu código! En el fragmento que publicaste hay un error al final echo '</span> }
. Te falta una '

¡Gracias! Ahora estoy usando:
`// obtener product_tags del producto actual $current_tags = get_the_terms( get_the_ID(), 'product_tag' );
// solo comenzar si tenemos algunas etiquetas if ( $current_tags && ! is_wp_error( $current_tags ) ) {
// crear una lista para contener nuestras etiquetas
echo '<span class="woocommerce-Price-amount amount">';
// por cada etiqueta creamos un elemento de lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nombre de la etiqueta
echo $tag_title.' · ';
}
echo '</span>
}`
¿Sabes cómo puedo eliminar el · final?

Ahora puedes usar la función wc_get_product_tag_list()
para obtener una lista de las etiquetas del producto. Soporta proporcionar un separador junto con elementos antes y después.
Ejemplo
<?php
global $product;
?>
<div class="product-tags">
<?php echo wc_get_product_tag_list( $product->get_id(), ', ' ); ?>
</div>

¡Hola y gracias por tu respuesta! Por favor, ten cuidado al copiar/pegar esta respuesta en múltiples preguntas. Asegúrate de que sea relevante para la pregunta específica. Tal vez usa código de la pregunta específica para implementarlo en tu respuesta como ejemplo. Esto evitará que el sistema lo marque como comportamiento spam.
