Cum se verifică dacă produsul face parte dintr-o anumită categorie în single-product.php în Woocommerce?

12 dec. 2012, 21:34:21
Vizualizări: 108K
Voturi: 30

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?

3
Comentarii

Poate fi pentru că prima ta declarație lipsește un ) de închidere? Ar trebui să fie if (is_product_category('audio'))

stealthyninja stealthyninja
12 dec. 2012 22:32:53

Bună observație, dar nu este asta. is_product_category nu pare să funcționeze pe single-product.php

Alex Alex
13 dec. 2012 00:10:14

is_product_category() este folosit pentru a verifica dacă te afli pe o pagină de arhivă a categoriei de produse.. Numele este confuz, sunt de acord, dar nu ar returna niciodată true pentru un singur produs. (vezi documentația)

Philip Philip
4 apr. 2022 22:19:16
Toate răspunsurile la întrebare 5
3
48

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';
}
18 dec. 2012 21:14:45
Comentarii

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

Trevor Trevor
25 mai 2017 05:57:39

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

Eoin Eoin
31 ian. 2018 23:49:55

A funcționat perfect pentru mine - mulțumesc!

Calum Childs Calum Childs
23 iul. 2021 08:41:49
0
32

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.

18 dec. 2012 21:05:33
1

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;
18 feb. 2015 18:13:08
Comentarii

Cred că acest răspuns ar trebui adăugat, ca editare, la răspunsul lui Milo.

cybmeta cybmeta
18 feb. 2015 18:41:36
0

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/

10 iun. 2016 00:37:40
3

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.

13 dec. 2012 00:26:38
Comentarii

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 Alex
13 dec. 2012 18:04:51

@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.

Steve Steve
13 dec. 2012 19:55:24

Mulțumesc, Steven că ți-ai luat timp să codezi acest mic fragment. Apreciez foarte mult.

Alex Alex
13 dec. 2012 19:56:59