Obține termenii de taxonomie pentru părinte și copil
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ă!

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

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

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

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.

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

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