Cum pot obține doar termenii părinte?

1 aug. 2011, 15:03:32
Vizualizări: 96.8K
Voturi: 29

Există vreo metodă prin care să obțin doar termenii părinte dintr-o taxonomie personalizată sau categorie?

0
Toate răspunsurile la întrebare 5
3
53

Da, doar trebuie să transmiți parametrul 'parent' către get_terms când îl apelezi, așa cum a menționat Michael.

Începând cu WordPress 4.5, aceasta este utilizarea recomandată:

$myterms = get_terms( array( 'taxonomy' => 'taxonomy_name', 'parent' => 0 ) );

Înainte de WP 4.5, aceasta era utilizarea implicită:

$myterms = get_terms( 'taxonomy_name_here', array( 'parent' => 0 ) );

Va returna toți termenii care au valoarea părinte 0, adică termenii de nivel superior.

1 aug. 2011 17:14:29
Comentarii

Returnează un array gol pentru taxonomiile personalizate :(

Mamaduka Mamaduka
2 aug. 2011 16:14:23

Sunt termenii din acea taxonomie asociați cu un post (sau tip custom)? Dacă nu, va trebui să treci parametrul hide_empty, setându-l și pe acesta la 0, astfel încât să poți vedea termenii care nu sunt folosiți în prezent.

t31os t31os
2 aug. 2011 16:25:38

Reține că aceasta va obține doar nivelul părinte 1, termenul "mamă". Pentru a obține toți strămoșii, folosește get_ancestors(TERM_ID, TAXONOMY, 'taxonomy') https://developer.wordpress.org/reference/functions/get_ancestors/

jave.web jave.web
13 apr. 2017 09:07:16
1

pentru șabloanele de email WooCommerce folosește următoarele:

$terms = get_the_terms( $_product->id , 'product_cat');
    if($terms) {
        foreach( $terms as $term ) {
            $term = get_term_by("id", $term->parent, "product_cat");
            if ($term->parent > 0) {
                $term = get_term_by("id", $term->parent, "product_cat");
            }
            $cat_obj = get_term($term->term_id, 'product_cat');
            $cat_name = $cat_obj->name;
        }
    }
echo '<br />('. $cat_name . ')';
2 sept. 2013 16:26:28
Comentarii

te rog să adaugi o explicație despre cum codul tău ar putea rezolva întrebarea. OP nu a pus o întrebare despre șabloanele de email WooCommerce.

iEmanuele iEmanuele
2 sept. 2013 17:34:10
4
// Obține termenii taxonomiei 'archivecat' sortați după numărul de postări, inclusiv cele goale, doar de la nivelul superior
$archive_cats = get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );
24 oct. 2013 11:10:18
Comentarii

Cum diferă acest lucru de răspunsul (deja acceptat) propus acum mai mult de doi ani?

tfrommen tfrommen
24 oct. 2013 11:31:46

ai văzut comentariile la răspunsul (deja acceptat)? dacă nu mai sunt răspunsuri utile, de ce întrebarea este încă deschisă?!

ashraf mohammed ashraf mohammed
12 nov. 2013 15:42:03

A existat o singură întrebare legată de termenii care nu apăreau, care nu era legată de întrebarea inițială, am abordat acea problemă într-un comentariu (deoarece nu avea nicio legătură cu validitatea sau corectitudinea răspunsului oferit deja).

t31os t31os
28 ian. 2014 15:48:06

Te rog să rezolvi asta într-o editare. Explică-ți codul.

kaiser kaiser
4 feb. 2014 00:19:25
0

Pentru această demonstrație, vom presupune că avem o taxonomie numită "Cărți". Și am putea avea o ierarhie de:

Ficțiune (id: 699)
 - Aceasta este o Poveste de Ficțiune.
Non-Ficțiune
 - Titlul Non-ficțiunii
Fantezie
  -  ...

Vrem să obținem termenul părinte al taxonomiei "Cărți" pentru postul curent.

/* Obține numele termenului părinte al taxonomiei după ID-ul postului */

function get_parent_term_by_post_id($taxname, $taxid=null){

if(isset($taxid)):

    //Obține după ID-ul termenului transmis în funcție
    $parent_tax = get_term_by('id', $taxid, $taxname);

    return $parent_tax ->name; //folosește name, slug sau id

else:

     //Obține după ID-ul postului paginii curente
     $terms = wp_get_post_terms( get_the_id(), $taxname);

     $tax_parent_id = $terms[0]->parent;

     if($tax_parent_id == 0):
      $tax_parent_id = $terms[0]->parent; //obține următorul ID părinte
     endif; 

     $parent_tax = get_term_by('id', $tax_parent_id , $taxname);

     return $parent_tax ->name; //folosește name, slug sau id

endif;

}

Apoi pur și simplu rulezi în template-ul tău astfel:

//introdu numele taxonomiei personalizate. va prelua după ID-ul postului 
echo get_parent_term_name_by_post_id('books'); //returnează Ficțiune

sau

//după ID-ul termenului 
echo get_parent_term_name_by_post_id('books', 699); //returnează Ficțiune
19 nov. 2020 17:10:22