get_term_children solo para hijos inmediatos (no nietos)

25 nov 2013, 07:39:11
Vistas: 20.9K
Votos: 8

Quiero mostrar los términos hijos de una taxonomía personalizada. Actualmente, puedo hacer esto usando get_term_children, pero usando esto, muestra los hijos y nietos, quiero evitar esto y hacer que solo se muestren los hijos inmediatos.

Esto es lo que tengo ahora (pero muestra hijos y nietos):

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

Esto es lo que estoy intentando hacer funcionar para que muestre solo los hijos inmediatos:

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

Esto me da un error:

Catchable fatal error: Object of class WP_Error could not be converted to string in...

¿Qué hice mal?

¡Gracias!

0
Todas las respuestas a la pregunta 1
1
13

Utiliza la función get_terms() en su lugar:

$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() puede devolver un objeto WP_Error, por lo que debes verificar que no lo haya hecho. Retorna un array de objetos de términos, así que ya no necesitas recuperar los objetos con get_term_by(). Dado que $child es un objeto de término, get_term_link() no necesita el segundo parámetro. get_terms() tiene más opciones para el segundo parámetro. Deberías echarle un vistazo.

25 nov 2013 18:55:22
Comentarios

Desde la versión 4.5.0 la taxonomía debe incluirse en el array de argumentos $term_children = get_terms( array( 'taxonomy' => 'mytaxname', 'parent' => get_queried_object_id(), ) );

Juniper Jones Juniper Jones
28 may 2020 21:23:16