Listar todas las subcategorías de una categoría

30 mar 2011, 16:56:04
Vistas: 131K
Votos: 30

¿Cómo puedo obtener todas las subcategorías de una categoría específica?

1
Comentarios

Como se explica aquí, también puedes usar get_terms(): https://stackoverflow.com/questions/22443352/how-to-get-sub-categories-by-parent-category-id-in-wordpress

Pbinder Pbinder
7 ago 2019 19:18:20
Todas las respuestas a la pregunta 2
4
39

Sí, puedes usar get_categories() utilizando el atributo 'child_of'. Por ejemplo, todas las subcategorías de la categoría con ID 17:

$args = array('child_of' => 17);
$categories = get_categories( $args );
foreach($categories as $category) { 
    echo '<p>Categoría: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todas las entradas en %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
    echo '<p> Descripción:'. $category->description . '</p>';
    echo '<p> Cantidad de entradas: '. $category->count . '</p>';  
}

Esto obtendrá todas las categorías que son descendientes (es decir, hijos y nietos).

Si deseas mostrar solo categorías que son descendientes directos (es decir, solo hijos) puedes usar el atributo 'parent'.

$args = array('parent' => 17);
$categories = get_categories( $args );
foreach($categories as $category) { 
    echo '<p>Categoría: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todas las entradas en %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
    echo '<p> Descripción:'. $category->description . '</p>';
    echo '<p> Cantidad de entradas: '. $category->count . '</p>';  
}
30 mar 2011 17:13:10
Comentarios

Solo una sugerencia: Con la popularidad de los tipos de entradas personalizadas y taxonomías, siento que sería mejor recomendar get_terms, ya que esto ayuda a familiarizar a los usuarios con funciones generales para obtener términos, mientras que las funciones de categorías son algo específicas para la taxonomía integrada (aunque no en todos los casos). No tienes que estar de acuerdo por supuesto, es solo una sugerencia... ;)

t31os t31os
30 mar 2011 17:49:21

Estoy de acuerdo en que get_terms() podría ser mejor.

Django Reinhardt Django Reinhardt
4 abr 2016 17:08:50

@t31os - ¿podrías publicar una respuesta usando get_terms por favor?

vsync vsync
30 mar 2018 23:23:33

por favor, ten en cuenta que, por defecto, esto no obtendrá las categorías que no tienen ninguna publicación asociada. usa hide_empty => false para obtener todas las categorías (según la versión reciente de WordPress)

Sumit Wadhwa Sumit Wadhwa
4 feb 2020 16:06:46
0

Para las "categorías" de tipos de posts personalizados usa get_terms().

(Modificando la respuesta de @Bainternet)

            $categories = get_terms( array(
                'taxonomy' => 'product_cat',
                'hide_empty' => false,
                'parent' => 17 // o 
                //'child_of' => 17 // para apuntar no solo a hijos directos
            ) );
            
            foreach($categories as $category) { 
                echo '<p>Categoría: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todas las publicaciones en %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
                echo '<p> Descripción:'. $category->description . '</p>';
                echo '<p> Cantidad de posts: '. $category->count . '</p>';  
            }
17 feb 2022 11:51:23