web-dev-qa-db-fra.com

Répertoriez uniquement les enfants de premier niveau d'un terme de taxonomie personnalisée

J'ai un site mis en place avec les éléments suivants:

  • Type de poste: produit
  • Taxonomie: produit_cat
  • Taxonomie Limousine: hydro

Le terme hydroélectricité a plusieurs conditions pour enfants immédiats et plusieurs conditions pour petits enfants.

Je dois écrire une boucle qui affiche uniquement les enfants de premier niveau du terme de taxonomie personnalisé "hydro" (c'est-à-dire - ignorer les termes relatifs aux petits-enfants), ainsi qu'un lien permanent vers leurs pages d'archive de taxonomie respectives.

J'ai essayé de travailler avec get_terms() dans diverses incarnations, mais je ne parviens pas à comprendre.

Toute aide est grandement appréciée. Merci!

1
Evster

Tout d’abord, vous avez besoin du terme id de terme hydro, vous pouvez le récupérer en utilisant get_term_by

$hydro = get_term_by('slug', 'hydro', 'product_cat');

Après cela, vous pouvez utiliser le terme id comme argument 'parent' pour get_terms.

$hydro_children = get_terms( 'product_cat', array( 'parent' => $hydro->term_id ) );

Maintenant, vous pouvez afficher une liste de ces enfants:

if ( ! empty($hydro_children) ) {
  echo '<ul>';
  foreach( $hydro_children as $hydro_child ) {
    echo '<li><a href="' . get_term_link($hydro_child, 'product_cat') . '">';
    echo $hydro_child->name . '</a></li>';
  }
  echo '</ul>';
}

Et/ou lancez une requête de publication pour les publications avec des termes $hydro_children attachés. Si vous le souhaitez, vous pouvez ignorer les publications n'ayant que des enfants de $hydro_children termes (petits-enfants de 'hydro') grâce à l'argument 'include_children' de la requête fiscale:

$args = array(
  'post_type' => 'product', // I guess
  'tax_query' => array(
    array(
      'taxonomy' => 'product_cat',
      'field' => 'id',
      'terms' => wp_list_pluck($hydro_children, 'term_id'),
      'include_children' => false
    )
   )
);
$query = new WP_Query( $args );
3
gmazzap