Je veux afficher le terme enfants d'une taxonomie personnalisée. Actuellement, je suis capable de faire cela en utilisant get_term_children , mais en utilisant ceci, il affiche les enfants et les petits-enfants, je veux éviter cela et faire en sorte que seuls les enfants immédiats soient affichés.
C’est ce que j’ai pour le moment (mais les enfants et les petits-enfants en sortent):
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$termchildren = get_term_children( $term_id, $taxonomy_name );
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
C’est ce que j’essaie de mettre au travail afin que l’on ne montre que les enfants immédiats:
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$args = array('parent' => $term_id,'parent' => $term_id );
$termchildren = get_terms( $taxonomy_name, $args);
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
Cela me donne une erreur:
Erreur fatale capturable: l'objet de la classe WP_Error n'a pas pu être converti en chaîne dans ...
Qu'ai-je fait de mal?
Merci!
Utilisez la fonction get_terms()
à la place:
$term_children = get_terms(
'mytaxname',
array(
'parent' => get_queried_object_id(),
)
);
if ( ! is_wp_error( $terms ) ) {
foreach ( $term_children as $child ) {
echo '
<div class="product-archive">
<div class="post-title">
<h3 class="product-name"><a href="' . get_term_link( $child ) . '">' . $child->name . '</a></h3>
</div>
</div>
';
}
}
get_terms()
peut renvoyer un objet WP_Error, vous devez donc vérifier que ce n'est pas le cas. Il retourne un tableau d'objets term, vous n'avez donc plus besoin de récupérer les objets avec get_term_by()
. Puisque $child
est un objet de terme, get_term_link()
n'a pas besoin du second paramètre. get_terms()
a plus d'options pour le second paramètre. Vous devriez jeter un coup d'oeil.