Cum se verifică dacă produsul face parte dintr-o anumită categorie în single-product.php în Woocommerce?
Cum pot verifica dacă un produs face parte dintr-o anumită categorie de produse în single-product.php?
<?php if (is_product_category('audio')) {
echo 'În audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif (is_product_category('elektro')) {
echo 'În elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'altceva'; } ?>
is_product_category('slug') nu funcționează în single-product.php. Vreau să folosesc condiționalele de mai sus. Există vreo soluție pentru aceasta pe o pagină single-product?
has_term
ar trebui să funcționeze în acest caz:
if ( has_term( 'audio', 'product_cat' ) ) {
echo 'În audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( has_term( 'elektro', 'product_cat' ) ) {
echo 'În elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'altceva';
}

Metodă super simplă și eficientă de a face asta. Cred că acesta este răspunsul mai bun.

Am preferat această variantă pentru că era scurtă. Totuși, am folosit if { thing; return;}

Cred că get_categories()
nu este cea mai bună opțiune în acest caz, deoarece returnează un șir de caractere cu toate categoriile listate ca elemente anchor, potrivit pentru afișare, dar nu foarte util pentru a determina în cod care sunt categoriile. Ok, deci primul lucru pe care trebuie să-l faci este să obții obiectul produs/post pentru pagina curentă, dacă nu-l ai deja:
global $post;
Apoi poți obține obiectele termen (categoriile) din categoria de produse pentru produs. Aici transform obiectele termen de categorie într-un simplu array numit $categories
pentru a fi mai ușor de văzut ce slug-uri sunt atribuite. Reține că acest lucru va returna toate categoriile atribuite produsului, nu doar cea a paginii curente, adică dacă suntem pe /shop/audio/funzo/
:
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;
Apoi trebuie doar să verificăm dacă o categorie se află în listă:
if ( in_array( 'audio', $categories ) ) { // faci ceva
Punând totul laolaltă:
<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;
if ( in_array( 'audio', $categories ) ) {
echo 'În audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
echo 'În elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'un text generic';
}
Sper că acesta este ceea ce căutai și că răspunde la întrebarea ta.

Este important de menționat că poți parcurge o listă de opțiuni prin apelarea unui array, în loc să încarcă codul cu multe verificări prin elseif
, presupunând că vrei să faci același lucru pentru fiecare categorie.
if( has_term( array( 'laptop', 'frigider', 'pălării', 'baghetă magică' ), 'product_cat' ) ) :
// Fă ceva aici
else :
// Fă altceva
endif;

Acest lucru este vechi, dar doar în cazul în care oamenii încă caută WooThemes ca o soluție simplă:
if ( is_product() && has_term( 'categoria_ta', 'product_cat' ) ) {
//execută codul
}
*Schimbă 'categoria_ta' cu orice categorie folosești.
Aici este linkul către documentație: https://docs.woothemes.com/document/remov-product-content-based-on-category/

Aș recomanda utilizarea funcției get_categories()
din clasa WC_Product.
Puteți găsi linkul către documentație aici.
În principiu, în bucla paginii, apelați funcția pentru a returna categoriile asociate produsului.

Nu sunt în stare să codez asta. Nu am nicio idee cum să fac asta să funcționeze. Cineva vă rog să ilustrați asta. Am încercat tot ce am putut mai sus. Ar trebui să înlocuiesc asta cu get_categories()?

@Alex funcția is_product_category() returnează TRUE dacă te afli pe pagina de categorie de produse. Nu categoria produsului. Sunt foarte ocupat cu un proiect acum, dar voi încerca să vă ofer un fragment de cod mai târziu.
