Cum obții categoria unui produs după ID?

23 nov. 2012, 17:30:32
Vizualizări: 136K
Voturi: 13

Am un ID al unui produs (1345) și vreau să aflu numele categoriei acelui produs specific?

Am încercat

$post_categories = wp_get_post_categories( $post->ID );
print_r( $post_categories );

dar îmi afișează:

Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )

Ce înseamnă asta?

Mulțumesc

2
Comentarii

Ce reprezintă ID-ul? Ce este un 'produs'? Este un custom post type? Un câmp meta? Ce anume?

s_ha_dum s_ha_dum
23 nov. 2012 17:37:29

Salut, Este un produs woocommerce și este un post type.

Rodrigo Sanz Rodrigo Sanz
23 nov. 2012 21:35:01
Toate răspunsurile la întrebare 5
0
22

Opțiunea #1

Obține toate categoriile de produse (product_cat) folosind această funcție

global $product;

$terms = get_the_terms( $product->get_id(), 'product_cat' );

Documentația oficială


Opțiunea #2 Dacă ai nevoie doar de ID-urile categoriilor, poți obține toate ID-urile de categorii asociate unui anumit produs, folosind această funcție:

global $product;

$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );

Documentația oficială


Extra

Dacă dorești să afișezi - de exemplu - numele categoriilor, ai nevoie de obiectul termenului categoriei. Acesta poate fi obținut folosind get_term_by().

Un exemplu:

foreach( $product_cats_ids as $cat_id ) {
    $term = get_term_by( 'id', $cat_id, 'product_cat' );

    echo $term->name;
}
2 sept. 2017 15:46:09
6
14

Deoarece întrebarea este etichetată cu woocommerce, presupun că este un CPT de produs creat de plugin-ul WordPress WooCommerce. Acest răspuns nu se aplică dacă nu este cazul.

Categoriile de produse nu sunt categorii obișnuite, ele sunt o taxonomie personalizată creată special pentru produse, care este etichetată doar ca "Categorii".

Ar trebui să parcurgeți documentația WooCommerce pentru a găsi o funcție care să facă asta pentru dvs. Dacă nu găsiți nimic, puteți încerca o soluție alternativă. Pentru aceasta, mai întâi ar trebui să știți numele taxonomiei. Îl puteți copia din URL-ul din browser când vizitați ecranul de editare al categoriilor în panoul de administrare. Apoi puteți folosi wp_get_post_terms pentru a obține termenii.

23 nov. 2012 20:13:25
Comentarii

Salut, mulțumesc pentru răspuns. Da, este un produs WooCommerce în WordPress. Ok, o să încerc, care sunt parametrii $args pentru wp_get_post_terms? Văd că "taxonomy" și "args" sunt opționale, așa că o să încerc doar cu ID-ul.

Rodrigo Sanz Rodrigo Sanz
23 nov. 2012 21:37:17

Nu va funcționa doar cu ID-ul. Taxonomia implicită este post_tag. Trebuie să treci numele taxonomiei acolo. Va funcționa fără $args, dar îl poți folosi dacă dorești. Este menit să suprascrie valorile implicite, așa cum este explicat pe această pagină

Mridul Aggarwal Mridul Aggarwal
24 nov. 2012 15:17:07

Am testat, dar nu afișează categoria în care se află produsul. Am folosit asta, <?php $term_list = wp_get_post_terms(1345, 'product_tag', array("fields" => "all")); print_r($term_list); ?>

Rodrigo Sanz Rodrigo Sanz
25 nov. 2012 18:03:36

afișează asta:Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) ) Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) )

Rodrigo Sanz Rodrigo Sanz
25 nov. 2012 18:05:37

Și nu există nicio categorie în array? Am făcut ceva greșit?

Rodrigo Sanz Rodrigo Sanz
25 nov. 2012 18:06:25

Ai folosit product_tag. Este posibil ca numele categoriei să fi fost product_category? Codul pare în regulă și după cum se vede în output, primești un termen numit new cu un id de 104. Este new numele unuia dintre tag-uri?

Mridul Aggarwal Mridul Aggarwal
25 nov. 2012 23:26:06
Arată celelalte 1 comentarii
2
12

Am răspuns singur la întrebarea mea, această soluție a funcționat pentru mine:

<?php 
// Obține lista de termeni (categorii) pentru un produs specific
$term_list = wp_get_post_terms($id_product, 'product_cat', array('fields'=>'ids'));
// Extrage ID-ul primei categorii
$cat_id = (int)$term_list[0];
// Afișează link-ul către categoria respectivă
echo get_term_link($cat_id, 'product_cat');
?>

Mulțumesc Mridul Aggarwal pentru ajutor

27 nov. 2012 21:29:12
Comentarii

Ai putea măcar să votezi pozitiv răspunsul lui Mridul, dacă nu crezi că este suficient de complet pentru a fi acceptat ca fiind corect. Clar te-a pus pe drumul cel bun.

Johannes Pille Johannes Pille
27 nov. 2012 21:34:34

poți folosi $product->get_id() pentru a afla "$id_product"

Fanky Fanky
1 mar. 2021 16:27:13
1
<?php
   $terms = get_the_terms($product->ID, 'product_cat');
       foreach ($terms as $term) {

         $product_cat = $term->name; // Obține numele categoriei de produs
            echo $product_cat; // Afișează numele categoriei
              break; // Ieșim din buclă după prima categorie găsită
          }
   ?>
19 aug. 2020 11:13:19
Comentarii

Te rog [editează] răspunsul tău și adaugă o explicație: de ce ar putea rezolva problema?

fuxia fuxia
19 aug. 2020 12:34:18
1

Obține toate categoriile de produse (product_cat) și afișează-le

global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
foreach( $product_cats_ids as $cat_id ) {
    $term = get_term_by( 'id', $cat_id, 'product_cat' );
    echo $term->name;
}
4 iun. 2024 23:49:35
Comentarii

asta a funcționat pentru mine

Mehdi Mehdi
6 oct. 2024 01:33:44