Ottenere termini di tassonomia per genitore e figlio in WordPress

10 nov 2014, 18:14:25
Visualizzazioni: 18.1K
Voti: 1

Ho una funzione impostata che stampa il nome e lo slug del termine di tassonomia per ogni termine presente nella tassonomia products-category. Funziona bene, ma li visualizza semplicemente in ordine alfabetico così (indipendentemente dal fatto che siano termini genitore o figlio):

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

Mentre io vorrei una struttura più simile a questa:

—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

In modo che i termini figli di ogni termine di tassonomia appaiano sotto, per mostrare a quale genitore appartengono. Il mio markup è il seguente:

<?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 }
 } ?>   

Qualsiasi suggerimento su come ottenere questo risultato sarebbe molto apprezzato!

0
Tutte le risposte alla domanda 3
2

Dovresti avere due cicli foreach. Uno per ottenere i termini della tassonomia genitore e il secondo per ottenere i termini della tassonomia figlio.

Nel secondo foreach è necessario specificare l'ID del termine della tassonomia genitore che è $parent_term->term_id dal primo ciclo foreach.

foreach( get_terms( 'products-category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) {
  // mostra il nome del termine di livello superiore
  echo $parent_term->name . '<br>';

  foreach( get_terms( 'products-category', array( 'hide_empty' => false, 'parent' => $parent_term->term_id ) ) as $child_term ) {
    // mostra il nome di tutti i figli del termine genitore
    echo $child_term->name . '<br>';
  }

}
10 nov 2014 18:24:46
Commenti

questo genera un errore di parsing: Parse error: syntax error, unexpected '['?

user1374796 user1374796
10 nov 2014 18:35:56

Questo dipende dalla tua versione di PHP. Per questa sintassi dovresti avere PHP 5.4+ credo. Controlla la mia risposta aggiornata! [] equivale a array() tra l'altro.

SLH SLH
10 nov 2014 18:37:02
3

Puoi semplicemente utilizzare wp_list_categories per visualizzare la tua lista. È estremamente versatile e può essere facilmente modificato per adattarsi alle tue esigenze specifiche. Anche se il nome suggerisce che sia solo per lo scopo della tassonomia predefinita category, non è così. Può essere utilizzato per qualsiasi tassonomia.

Dovrai lavorare sugli esempi e modificare secondo necessità. Ecco un semplice esempio che puoi usare per visualizzare la tua lista:

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

Utilizzando il mio metodo ha più flessibilità e controllo su come vengono visualizzati i termini della tassonomia. Ma anche la tua risposta va bene.

SLH SLH
10 nov 2014 18:57:28

Se usi il tuo walker con questo metodo puoi ottenere la stessa flessibilità e controllo.

Milo Milo
10 nov 2014 21:23:38

@Milo sì, tutto dipende da ciò che l'OP vuole effettivamente ottenere. Devo ammetterlo, ottima osservazione

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

Basandomi sulla risposta accettata, ho realizzato una visualizzazione a livelli di una tassonomia con elementi checkbox. Nel caso qualcuno ne avesse bisogno:

$taxonomy_name = 'your-taxonomy';
foreach (get_terms($taxonomy_name, array('hide_empty' => false, 'parent' => 0)) as $parent_term) {
   // mostra il nome del termine di livello superiore
   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) {
      // mostra il nome del primo livello figlio del termine padre
      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) {
         // mostra il nome del secondo livello figlio (nipote) del termine padre
         echo "<li class='depth-3'><label><input type='checkbox'  name='{$taxonomy_name}' value='{$grandchild_term->slug}'>{$grandchild_term->name}</label></li>";
      }
   }
}
19 set 2024 17:26:24