Je crée un menu de sélection d'âge dans l'administrateur, rempli à partir d'une taxonomie de age
. La taxonomie est hiérarchique comme suit:
- 18-25 (parent, ID 183)
- 18 (enfant)
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26-30 (parent, ID 184)
- 26
- 27
- 28
- 29
- 30
Je voudrais seulement lister les enfants (18, 19 etc) et non les parents (18-25, 26-30) etc. Actuellement, j'utilise get_terms
l' parent
argument, mais il n'accepte pas plus d'une ID parent. Voici ce que j'ai jusqu'à présent, qui montre les enfants de 18 à 25 ans.
$ages = get_terms( 'age', array(
'hide_empty' => 0,
'parent' => '183',
));
Voici ce que je veux qu'il fasse, mais n'est pas pris en charge. Je l'ai également essayé avec un tableau mais cela ne fonctionne pas non plus.
$ages = get_terms( 'age', array(
'hide_empty' => 0,
'parent' => '183,184',
));
Je vois qu'il y a une fonction get_term_children mais je ne suis pas sûr de savoir comment l'utiliser, car il semble qu'il n'accepte qu'une seule valeur également. Par exemple: Dans cet exemple, il créerait une liste non ordonnée mais je pourrais modifier pour sélectionner le menu.
<?php
$termID = 183;
$taxonomyName = "age";
$termchildren = get_term_children( $termID, $taxonomyName );
echo '<ul>';
foreach ($termchildren as $child) {
$term = get_term_by( 'id', $child, $taxonomyName );
echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
?>
la source
get_terms
deux fois et fusionnez les deux tableaux de résultats?get_terms
appel). Votre question se lit comme si vous vouliez tous les enfants de 2 termes parentaux particuliers.Réponses:
Cela devrait fonctionner pour vous:
la source
$term->name
n'est pas valide dansget_term_link()
, il n'accepte que le terme ID, slug ou objectVous pourriez également faire:
J'ai remarqué que le parent a un champ "parent" égal à 0 et qu'un enfant a son identifiant parent.
la source
wpse_exclude_top
paramètre ajouté aux arguments de la requête ;-). Je suis cependant d'accord, c'est plus rapide que la réponse acceptéewpse_exclude_top
et je ne les ai pas trouvéesexclude_top
. Google ne le sait pas non plus . Où est-il documenté?Nous pouvons exclure les parents de niveau supérieur en les filtrant en utilisant le
terms_clauses
filtre pour modifier la requête SQL avant son exécution. De cette façon, nous n'avons pas besoin d'ignorer les parents dans laforeach
boucle finale car ils ne sont pas dans le tableau de termes retourné, cela nous évite un travail et un codage inutilesVous pouvez essayer ce qui suit:
Pour exclure les parents de niveau supérieur, nous pouvons maintenant passer
'wpse_exclude_top' => 1
avec notre tableau d'arguments. Le nouveauwpse_exclude_top
paramètre est pris en charge par le filtre ci-dessusJuste une note,
get_term_link()
n'acceptez pas le nom du terme, seulement, slug, ID ou l'objet terme complet. Pour les performances, transmettez toujours toujours l'objet terme àget_term_link()
si l'objet terme est disponible ( comme dans ce cas )la source
Pourquoi ne pouvez-vous pas simplement définir l'
childless
argument sur vrai?la source
childless
argument sur true signifie que vous ne pouvez aller qu'à un niveau, donc cela ne fonctionne pas pour les taxonomies à 3 niveaux ou plus.Si vous affichez l'enfant de plusieurs parents, vous pouvez essayer ceci. Afficher mention terme terme enfant terme.
la source