Obține termenii de taxonomie pentru părinte și copil

10 nov. 2014, 18:14:25
Vizualizări: 18.1K
Voturi: 1

Am o funcție configurată care afișează numele și slug-ul termenilor de taxonomie pentru fiecare termen din taxonomia products-category. Funcționează bine, dar îi afișează doar în ordine alfabetică, indiferent dacă sunt termeni părinte sau copii, astfel:

Parent Category 2
Parent Category 1 
Child Category 3
Parent Category 3
Child Category 2
Child Category 1
etc...

Însă eu doresc o structură mai degrabă de genul:

—Parent Category 1
Child Category 1  
Child Category 2
Child Category 3

—Parent Category 2
Child Category 1
Child Category 2  
Child Category 3

—Parent Category 3
Child Category 1
Child Category 2
Child Category 3

Adică termenii copii să apară sub termenul părinte corespunzător, pentru a se ști cărui părinte îi aparțin. Codul meu arată astfel:

<?php
$args = array(
    'hide_empty' => false
);  
 $terms = get_terms("products-category");
 if ( !empty( $terms ) && !is_wp_error( $terms ) ){
     foreach ( $terms as $term ) { ?>
      <option value=".<?php echo $term->slug; ?>" data-hook="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option>
    <?php }
 } ?>

Orice sugestie pentru a obține acest rezultat ar fi foarte apreciată!

0
Toate răspunsurile la întrebare 3
2

Ar trebui să ai două bucle foreach. Una pentru obținerea termenilor taxonomiei părinte și a doua pentru obținerea termenilor taxonomiei copil.

În cea de-a doua buclă trebuie să specifici ID-ul termenului taxonomiei părinte, care este $parent_term->term_id din prima buclă foreach.

foreach( get_terms( 'products-category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) {
  // afișează numele termenului de nivel superior
  echo $parent_term->name . '<br>';

  foreach( get_terms( 'products-category', array( 'hide_empty' => false, 'parent' => $parent_term->term_id ) ) as $child_term ) {
    // afișează numele tuturor copiilor termenului părinte
    echo $child_term->name . '<br>';
  }

}
10 nov. 2014 18:24:46
Comentarii

acest lucru generează o eroare de parsare: Parse error: syntax error, unexpected '['?

user1374796 user1374796
10 nov. 2014 18:35:56

Aceasta se întâmplă din cauza versiunii tale de PHP. Pentru această sintaxă ar trebui să ai PHP 5.4+ cred. Verifică răspunsul meu actualizat! [] este echivalent cu array() apropo.

SLH SLH
10 nov. 2014 18:37:02
3

Puteți folosi simplu funcția wp_list_categories pentru a afișa lista dumneavoastră. Aceasta este extrem de versatilă și poate fi ușor modificată pentru a se potrivi nevoilor dumneavoastră specifice. Deși numele sugerează că este destinată doar taxonomiei încorporate category, nu este așa. Poate fi utilizată pentru orice taxonomie.

Va trebui să lucrați prin exemple și să modificați după nevoie. Iată un exemplu simplu pe care îl puteți folosi pentru a afișa lista dumneavoastră:

wp_list_categories('taxonomy=products-category');
10 nov. 2014 18:48:15
Comentarii

Folosind metoda mea, el are mai multă flexibilitate și control asupra modului în care sunt afișate termenii de taxonomie. Dar răspunsul tău este de asemenea OK.

SLH SLH
10 nov. 2014 18:57:28

Dacă folosești propriul tău walker cu această metodă, poți obține aceeași flexibilitate și control.

Milo Milo
10 nov. 2014 21:23:38

@Milo da, totul depinde de OP și de ceea ce dorește să obțină. Trebuie să recunosc, observație excelentă

Pieter Goosen Pieter Goosen
10 nov. 2014 21:30:00
0

Bazându-mă pe răspunsul acceptat, am creat o structură de termeni de taxonomie pentru nepoți, iar toate elementele sunt checkbox-uri. În caz că cineva va avea nevoie:

$taxonomy_name = 'your-taxonomy';
foreach (get_terms($taxonomy_name, array('hide_empty' => false, 'parent' => 0)) as $parent_term) {
   // afișează numele termenului de nivel superior
   echo "<li class='depth-1'><label><input type='checkbox'  name='{$taxonomy_name}' value='{$parent_term->slug}'>{$parent_term->name}</label></li>";

   foreach (get_terms($taxonomy_name, array('hide_empty' => false, 'parent' => $parent_term->term_id)) as $child_term) {
      // afișează numele copilului de prim nivel al termenului părinte
      echo "<li class='depth-2'><label><input type='checkbox'  name='{$taxonomy_name}' value='{$child_term->slug}'>{$child_term->name}</label></li>";

      foreach (get_terms($taxonomy_name, array('hide_empty' => false, 'parent' => $child_term->term_id)) as $grandchild_term) {
         // afișează numele copilului de al doilea nivel (nepot) al termenului părinte
         echo "<li class='depth-3'><label><input type='checkbox'  name='{$taxonomy_name}' value='{$grandchild_term->slug}'>{$grandchild_term->name}</label></li>";
      }
   }
}
19 sept. 2024 17:26:24