Obtener las categorías hijas de la categoría padre

29 nov 2012, 17:32:36
Vistas: 138K
Votos: 25

Estoy tratando de obtener todas las categorías hijas para mostrarlas en este bucle pero estoy teniendo problemas con el código. Esto es lo que tengo hasta ahora.

<?php $args=array('orderby' => 'name', 'order' => 'ASC');
    $categories=get_categories($args); 
    foreach ($categories as $cat) { ?>
    <dt><a href="#" class="customer-acquisitiontop" id="<?php echo $cat->slug; ?>" data-filter=".<?php echo $cat->slug; ?>"><h2><?= $cat->cat_name; ?></h2></a></dt>
    <dd><div class="services">
    <?= $categories=get_categories('parent'); ?> /*Esto debería ser las categorías hijas de la categoría padre */
    </div>
    </dd>
<?php } ?>

Cualquier ayuda sería genial

0
Todas las respuestas a la pregunta 4
5
30

No puedes simplemente pasar la cadena "parent" a get_categories. Debes pasar el ID del padre.

$categories=get_categories(
    array( 'parent' => $cat->cat_ID )
);

Ten en cuenta que hay dos parámetros "obtener hijos" similares pero no iguales que puedes usar.

child_of (entero) Muestra todas las categorías que son descendientes (es decir, hijos y nietos) de la categoría identificada por su ID. No hay un valor predeterminado para este parámetro. Si se usa el parámetro, el parámetro hide_empty se establece en false.

parent (entero) Muestra solo categorías que son descendientes directos (es decir, solo hijos) de la categoría identificada por su ID. Esto NO funciona como el parámetro 'child_of'. No hay un valor predeterminado para este parámetro. [En la versión 2.8.4]

Ahora necesitas iterar sobre $categories. No puedes simplemente imprimir un array.

foreach ($categories as $c) {
    var_dump($c);
    // lo que realmente quieres en lugar de var_dump es algo para
    // crear marcado, tal vez elementos de lista. Por ejemplo...
    echo '<li>'.$c->cat_name.'</li>';
}
29 nov 2012 18:01:50
Comentarios

Desafortunadamente, eso solo me está dando una salida de Array. No se están extrayendo valores.

Chris Da Sie Chris Da Sie
29 nov 2012 18:37:01

'Array' es lo que sucede cuando intentas hacer echo de un array. Necesitas iterar sobre el array y hacer echo de los elementos individuales.

s_ha_dum s_ha_dum
29 nov 2012 18:39:59

Podrías querer añadir 'hide_empty' => false. Para mostrar también las categorías vacías.

Floris Floris
18 jun 2018 17:09:27

opcionalmente, puedes obtener el ID de la categoría así ->$categories = get_categories( array( 'parent' => get_cat_ID( 'Tu Nombre de Categoría' ) ) ); ... siempre y cuando el nombre de la categoría no cambie

aequalsb aequalsb
16 feb 2022 15:28:03

Para obtener categorías que no son categorías de posts, añades taxonomy al array, por ejemplo array( 'parent' => 999, 'taxonomy' => 'documentation_category' ).

And Finally And Finally
22 jun 2022 16:32:20
1

Utiliza el siguiente código en tu archivo archive.php. Este código te ayudará:

$term = get_queried_object();
    
$children = get_terms( $term->taxonomy, array(
    'parent'    => $term->term_id,
    'hide_empty' => false
));
    
if ( $children ) { 
    foreach( $children as $subcat ) {
        echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '">' . $subcat->name . '</a></li>';
    }
}
25 abr 2018 10:18:18
Comentarios

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué eso podría resolver el problema?

fuxia fuxia
25 abr 2018 10:57:45
0

Si no hay valores en el array, puedes probar el siguiente enfoque:

// Obtener las últimas categorías de productos hijos
$last_categories = get_categories(
  array(
    'taxonomy' => 'product_cat', // Taxonomía para categorías de productos
    'parent' => $sub_category->cat_ID // ID de la categoría padre
  )
);
22 dic 2019 19:00:06
0
-1

Para obtener categorías hijas puedes usar el siguiente código.

$category = get_queried_object(); // Esto es para obtener la categoría padre en el archivo o cualquier lugar donde se llame el objeto de categoría.
$categories = get_categories(
                        array( 'parent' => $category->term_id,
                                'hide_empty' => false )
                                );

Nota: He usado 'hide_empty' => false para mostrar categorías que no tengan ninguna publicación asociada. Luego usa el array $categories para hacer un bucle y crear tu marcado.

2 mar 2020 07:55:59