Cum să afișezi numele etichetelor produselor WooCommerce pe pagina principală și în categorii

4 oct. 2017, 15:31:25
Vizualizări: 28.2K
Voturi: 1

Încerc să afișez etichetele produselor WooCommerce pe pagina principală și în paginile de categorii. Împreună cu titlul produsului, tema ar trebui să afișeze orice etichete în ordine alfabetică, separate prin "·".

De exemplu: Etichetă 1 · Etichetă 2 · Etichetă 3

Iată ce am în prezent:

<?php echo get_the_tag_list('<span class="woocommerce-display-tag">Tags: ',' · ','</span>');?>

Rezultatul este gol.

Cum pot face acest lucru să funcționeze?

0
Toate răspunsurile la întrebare 2
2

Cred că get_the_tag_list este folosit doar pentru tagurile implicite din WordPress. Tagurile de produse WooCommerce sunt o taxonomie personalizată numită product_tag. Prin urmare, nu poți folosi această funcție pentru a returna aceste taguri. (dacă greșesc, corectați-mă vă rog)

În schimb, poți folosi funcția WordPress get_the_terms() pentru a obține un rezultat "similar".

Structură de bază:

// obține product_tags ale produsului curent
$current_tags = get_the_terms( get_the_ID(), 'product_tag' );

//începe doar dacă avem taguri
if ( $current_tags && ! is_wp_error( $current_tags ) ) { 

    //creează o listă pentru tagurile noastre
    echo '<ul class="product_tags">';

    //pentru fiecare tag creează un element de listă
    foreach ($current_tags as $tag) {

        $tag_title = $tag->name; // numele tagului
        $tag_link = get_term_link( $tag );// linkul către arhiva tagului

        echo '<li><a href="'.$tag_link.'">'.$tag_title.'</a></li>';
    }

    echo '</ul>';
}

Dacă vrei să folosești un separator special sau alte detalii, va trebui să ajustezi codul.


Actualizare pentru separatori:

Ai mai multe opțiuni pentru a elimina ultimul separator sau pentru a gestiona separatorii în general.

Prima metodă folosește doar CSS. Pentru asta, mai întâi înfășurăm fiecare $tag_title într-un element HTML (aici un <span>). Facem asta pentru a putea ținti fiecare titlu.

//pentru fiecare tag creează un element
foreach ($current_tags as $tag) {

    $tag_title = $tag->name; // numele tagului

    echo '<span>'.$tag_title.'</span>';
}

Apoi adăugăm 2 stiluri CSS noi (folosind markup-ul tău):

/* adaugă " · " după fiecare element span din interiorul .woocommerce-Price-amount */
.woocommerce-Price-amount span:after { content: " · "; }

/* setează conținutul la nimic/elimină " · " pe ultimul element span */
.woocommerce-Price-amount span:last-child:after { content: ""; }

Poți adăuga un separator prin PHP.
Pentru asta, mai întâi avem nevoie de un nou array cu toate cheile din array-ul nostru $current_tags. Apoi căutăm ultima cheie găsită în acest nou array. După aceea folosim o foreach loop și în aceasta comparam cheia curentă cu ultima cheie găsită. Dacă acestea sunt identice, știm că avem ultimul element.

Modifică funcția ta if:

//începe doar dacă avem taguri
if ( $current_tags && ! is_wp_error( $current_tags ) ) { 

    //creează un element span pentru taguri
    echo '<span class="woocommerce-Price-amount amount">';

    // obține toate cheile din array-ul $current_tags
    $get_keys = array_keys($current_tags);

    // obține ultima cheie din array-ul de chei
    $last_key = array_pop($get_keys);

    //pentru fiecare tag creează un element
    foreach ($current_tags as $key => $value) {

        $tag_title = $value->name; // numele tagului

        if($key == $last_key) {
            echo $tag_title;
        } else {
            echo $tag_title.' · ';
        }

    }
    echo '</span>';
}

P.S. fii atent la cod! În fragmentul tău postat există o eroare la finalul echo '</span> }. Îți lipsește un '

4 oct. 2017 15:56:57
Comentarii

Mulțumesc! Acum folosesc:

`// obține etichetele de produs ale produsului curent $current_tags = get_the_terms( get_the_ID(), 'product_tag' );

//începe doar dacă avem etichete if ( $current_tags && ! is_wp_error( $current_tags ) ) {

//creează o listă pentru etichetele noastre
echo '<span class="woocommerce-Price-amount amount">';

//pentru fiecare etichetă creăm un element de listă
foreach ($current_tags as $tag) {

    $tag_title = $tag->name; // numele etichetei

    echo $tag_title.' · ';
}

 echo '</span>

}`

Știi cum pot elimina ultimul ·?

illmasterj illmasterj
4 oct. 2017 19:04:01

@illmasterj poți elimina ultimul · prin CSS sau PHP. Tocmai am actualizat răspunsul meu cu două metode diferite.

LWS-Mo LWS-Mo
6 oct. 2017 13:49:51
1

Acum poți folosi funcția wc_get_product_tag_list() pentru a obține o listă de etichete ale produsului. Aceasta acceptă furnizarea unui separator împreună cu elemente de tip "înainte" și "după".

Exemplu

<?php
    global $product;
?>
    <div class="product-tags">
        <?php echo wc_get_product_tag_list( $product->get_id(), ', ' ); ?>
    </div>
12 oct. 2020 18:27:37
Comentarii

Salut și mulțumesc pentru răspuns! Te rog să fii atent când copiezi/lipești acest răspuns în mai multe întrebări. Asigură-te că este relevant pentru întrebarea specifică. Poți folosi codul din întrebarea specifică pentru a-l integra în răspunsul tău ca exemplu. Acest lucru va preveni sistemul să îl marcheze ca un comportament spam.

Howdy_McGee Howdy_McGee
12 oct. 2020 19:11:58