Come visualizzare i nomi dei tag dei prodotti WooCommerce nelle pagine home e categorie

4 ott 2017, 15:31:25
Visualizzazioni: 28.2K
Voti: 1

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?

0
Tutte le risposte alla domanda 2
2

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 '

4 ott 2017 15:56:57
Commenti

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?

illmasterj illmasterj
4 ott 2017 19:04:01

@illmasterj puoi rimuovere il · finale tramite CSS o via PHP. Ho appena aggiornato la mia risposta con due metodi diversi.

LWS-Mo LWS-Mo
6 ott 2017 13:49:51
1

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>
12 ott 2020 18:27:37
Commenti

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.

Howdy_McGee Howdy_McGee
12 ott 2020 19:11:58