Ottenere termini di tassonomia per genitore e figlio in WordPress
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!

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>';
}
}

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

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');

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

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

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>";
}
}
}
