Come visualizzare i nomi dei tag dei prodotti WooCommerce nelle pagine home e categorie
Sto cercando di visualizzare i tag dei prodotti WooCommerce nella home page e nelle pagine delle categorie. Insieme al titolo del prodotto, il tema dovrebbe mostrare tutti i tag in ordine alfabetico, separati da un "·".
Per esempio: Tag 1 · Tag 2 · Tag 3
Questo è quello che ho al momento:
<?php echo get_the_tag_list('<span class="woocommerce-display-tag">Tags: ',' · ','</span>');?>
L'output è vuoto.
Come posso farlo funzionare?

Penso che get_the_tag_list
sia utilizzato solo per i tag predefiniti di WordPress. I tag dei prodotti WooCommerce sono una tassonomia personalizzata chiamata product_tag
. Pertanto, non puoi utilizzare questa funzione per restituire questi tag. (qualcuno mi corregga se sbaglio qui)
Invece, potresti utilizzare la funzione WordPress get_the_terms()
per ottenere un risultato "simile".
Struttura di base:
// ottieni i product_tag del prodotto corrente
$current_tags = get_the_terms( get_the_ID(), 'product_tag' );
// procedi solo se abbiamo dei tag
if ( $current_tags && ! is_wp_error( $current_tags ) ) {
// crea una lista per contenere i nostri tag
echo '<ul class="product_tags">';
// per ogni tag creiamo un elemento della lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nome del tag
$tag_link = get_term_link( $tag ); // link all'archivio del tag
echo '<li><a href="'.$tag_link.'">'.$tag_title.'</a></li>';
}
echo '</ul>';
}
Se vuoi utilizzare un separatore speciale o altre personalizzazioni, dovrai fare qualche aggiustamento.
Aggiornamento per i separatori:
Hai alcune opzioni su come rimuovere l'ultimo separatore o gestire i separatori in generale qui.
Il primo metodo utilizza solo CSS. Per questo, prima avvolgiamo ogni $tag_title
in un elemento HTML (qui un <span>
). Lo facciamo per poter puntare a ogni titolo.
// per ogni tag creiamo un elemento della lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nome del tag
echo '<span>'.$tag_title.'</span>';
}
Poi aggiungiamo semplicemente 2 nuovi stili CSS (utilizzando il tuo markup):
/* aggiungi " · " dopo ogni elemento span dentro .woocommerce-Price-amount */
.woocommerce-Price-amount span:after { content: " · "; }
/* imposta il contenuto a nulla/rimuovi " · " sull'ultimo elemento span */
.woocommerce-Price-amount span:last-child:after { content: ""; }
Puoi anche aggiungere un separatore tramite PHP.
Per questo, dobbiamo prima ottenere un nuovo array di tutte le chiavi del nostro array $current_tags
. Poi cerchiamo l'ultima chiave trovata in questo nuovo array. Dopodiché utilizziamo un foreach loop
e in esso confrontiamo la chiave corrente con l'ultima chiave trovata. Se queste due sono uguali, sappiamo che abbiamo l'ultimo elemento.
Modifica la tua funzione if
:
// procedi solo se abbiamo dei tag
if ( $current_tags && ! is_wp_error( $current_tags ) ) {
// crea una lista per contenere i nostri tag
echo '<span class="woocommerce-Price-amount amount">';
// ottieni tutte le chiavi dall'array $current_tags
$get_keys = array_keys($current_tags);
// ottieni l'ultima chiave dalle nostre chiavi
$last_key = array_pop($get_keys);
// per ogni tag creiamo un elemento della lista
foreach ($current_tags as $key => $value) {
$tag_title = $value->name; // nome del tag
if($key == $last_key) {
echo $tag_title;
} else {
echo $tag_title.' · ';
}
}
echo '</span>';
}
P.S. controlla il tuo codice! Nello snippet che hai pubblicato c'è un errore alla fine echo '</span> }
. Manca un '

Grazie! Ora sto utilizzando:
`// ottieni i product_tag del prodotto corrente $current_tags = get_the_terms( get_the_ID(), 'product_tag' );
// procedi solo se ci sono tag if ( $current_tags && ! is_wp_error( $current_tags ) ) {
//crea una lista per contenere i nostri tag
echo '<span class="woocommerce-Price-amount amount">';
//per ogni tag creiamo un elemento lista
foreach ($current_tags as $tag) {
$tag_title = $tag->name; // nome del tag
echo $tag_title.' · ';
}
echo '</span>
}`
Sai come posso rimuovere il · finale?

Ora puoi utilizzare la funzione wc_get_product_tag_list()
per ottenere un elenco dei tag del prodotto. Supporta la fornitura di un separatore insieme agli elementi prima e dopo.
Esempio
<?php
global $product;
?>
<div class="product-tags">
<?php echo wc_get_product_tag_list( $product->get_id(), ', ' ); ?>
</div>

Ciao e grazie per la tua risposta! Per favore, fai attenzione quando copi/incolli questa risposta in più domande. Assicurati che sia pertinente alla domanda specifica. Potresti usare il codice della domanda specifica per implementarlo nella tua risposta come esempio. Questo eviterà che il sistema la contrassegni come comportamento spam.
