Cómo obtener las categorías hijas de una entrada específica en WordPress
¿Cómo puedo obtener los nombres de las categorías hijas de una entrada arbitraria en WordPress?
Por ejemplo, tengo una categoría con el slug 'motocicletas' y tiene subcategorías. Necesito obtener el nombre de la subcategoría de cada entrada que pertenece a la categoría con slug motocicletas.
Aquí te muestro cómo hacerlo:
// Obtener las categorías hijas de una categoría específica
$parent_category = get_category_by_slug('motorbikes');
$child_categories = get_categories(array(
'child_of' => $parent_category->term_id,
'hide_empty' => false // Mostrar incluso categorías vacías
));
// Para una entrada específica, obtener sus categorías hijas
$post_id = 123; // ID de la entrada
$post_categories = wp_get_post_categories($post_id);
$child_categories_for_post = array();
foreach ($post_categories as $cat_id) {
$category = get_category($cat_id);
if ($category->parent == $parent_category->term_id) {
$child_categories_for_post[] = $category->name;
}
}
// Mostrar los nombres de las categorías hijas
if (!empty($child_categories_for_post)) {
echo 'Categorías hijas: ' . implode(', ', $child_categories_for_post);
} else {
echo 'Esta entrada no tiene categorías hijas en la categoría motocicletas.';
}
También puedes usar este enfoque alternativo:
// Obtener todas las categorías hijas de 'motorbikes' para la entrada actual
$parent_category = get_category_by_slug('motorbikes');
$current_post_categories = get_the_category();
$child_categories = array();
foreach ($current_post_categories as $category) {
if ($category->parent == $parent_category->term_id) {
$child_categories[] = $category->name;
}
}
// Mostrar resultados
if (!empty($child_categories)) {
echo 'Subcategorías: ' . implode(', ', $child_categories);
}
Estos ejemplos te permitirán obtener los nombres de las subcategorías específicas para cada entrada dentro de la categoría principal 'motocicletas'.

Para obtener las categorías hijas de una categoría padre dada por su slug, utiliza una combinación de get_category_by_slug()
y get_categories()
.
La última función devolverá un array de objetos de categoría que coincidan con los argumentos de consulta especificados; la primera devolverá el ID de una categoría dado su slug.
Por ejemplo:
<?php
$motorbike_child_cat_args = array(
'child_of' => get_category_by_slug( 'motorbikes' )
);
$motorbike_child_cats = get_categories( $motorbike_child_cat_args );
?>
Luego, puedes hacer lo que quieras con tu array de objetos de categoría. Por ejemplo, para obtener un array de nombres de categorías hijas:
<?php
$motorbike_child_cat_names = array();
foreach ( $motorbike_child_cats as $child_cat ) {
$motorbike_child_cat_names[] = $child_cat->name;
}
?>
Realmente, lo que hagas con ello depende de ti en ese punto.
EDITADO
Si necesitas obtener las categorías hijas de una publicación arbitraria, entonces puedes usar get_the_category()
.
Si estás dentro del Loop, simplemente llama a get_the_category()
; si estás fuera del Loop, entonces necesitas pasar el ID de la publicación a la llamada: get_the_category( $id )
.
Por ejemplo, para construir un array de nombres de categorías hijas (sin importar la padre) de la publicación actual:
<?php
$my_post_categories = get_the_category();
$my_post_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
if ( 0 != $post_cat->category_parent ) {
$my_post_child_cats[] = $post_cat->cat_name;
}
}
?>
O, por ejemplo, para construir un array de nombres de categorías hijas de 'motorbikes' de la publicación actual:
<?php
$my_post_categories = get_the_category();
$motorbikes_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
if ( 'motorbikes' == $post_cat->category_parent ) {
$motorbikes_child_cats[] = $post_cat->cat_name;
}
}
?>
¿Es esto más lo que estás buscando?
EDITADO 2
Si solo necesitas obtener todas las categorías de tu publicación:
<?php
$all_post_categories = get_the_category();
$my_post_cats = array();
foreach ( $my_post_categories as $post_cat ) {
$my_post_cats[] = $post_cat->cat_name;
}
?>
Eso te dará todas las categorías de la publicación actual. No tengo idea de cómo el slug de categoría motorbikes
influye en esta pregunta.

Hola, gracias, pero ¿cómo puedo obtener el nombre de la subcategoría de $post->ID, ya que $cat = get_the_category($post->ID); $category_name = $cat->name;
no funciona?

Entonces, ¿estás intentando obtener las categorías hijas de una publicación arbitraria, en lugar de las categorías hijas de una categoría conocida, 'motorbikes'?

Hola, sí pero ¿cómo puedo mostrarlo con echo? Si hago algo como esto - echo $motorbikes_child_cats[0]; o echo $my_post_child_cats[0]; simplemente mostrará vacío.

¿Qué obtienes con <?php var_dump( $my_post_child_cats ); ?>
? Si está vacío, ¿estás seguro de que tu publicación realmente tiene categorías hijas?

Hola, devuelve NULL, ¿eso significa que no tengo subcategorías? Si es así, ¿cómo obtengo el nombre de la categoría para mi publicación si el slug de la categoría es 'motorbikes'?

// Obtener las categorías del post actual (solo IDs)
$categories = wp_get_post_categories( get_the_ID(), array('fields' => 'ids') );
// Configurar argumentos para obtener términos de categoría
$arguments = array(
'taxonomy' => 'category', // Taxonomía a consultar (categorías)
'childless' => true, // Solo categorías sin hijos
'include' => $categories, // Incluir solo las categorías del post
);
// Obtener la categoría seleccionada según los argumentos
$selected_category = get_terms( $arguments );
