web-dev-qa-db-fra.com

get_term_children pour les enfants immédiats seulement (pas les petits-enfants)

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!

4
b0nd

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.

7
Charles Clarkson