Cum să afișezi numele etichetelor produselor WooCommerce pe pagina principală și în categorii
Î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?

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 '

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 ·?

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>

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.
