get_term_children solo para hijos inmediatos (no nietos)
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!
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.
