Cómo obtener las categorías hijas de una entrada específica en WordPress

20 oct 2011, 21:48:11
Vistas: 18.6K
Votos: 2

¿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'.

5
Comentarios

¿Puedes explicar la relevancia de que el slug de categoría cambie, en lugar de que la pregunta sea simplemente una cuestión de obtener las categorías hijas de una categoría padre?

Chip Bennett Chip Bennett
20 oct 2011 22:08:07

Hola, normalmente el slug de categoría es 'category', pero para mí es 'motorbikes', y dentro del slug de categoría 'motorbikes' tengo subcategorías. En las subcategorías tengo posts, y necesito obtener el nombre de la subcategoría con $cat = get_the_category($post->ID); $category_name = $cat->name; , pero no puedo porque devuelve un array vacío.

Y2ok Y2ok
20 oct 2011 22:18:34

Todavía no lo entiendo. ¿Qué quieres decir con "normalmente el slug de categoría es 'category'"? ¿Estás hablando por casualidad de la base de URL de categoría?

Chip Bennett Chip Bennett
20 oct 2011 22:30:24

Hola, sí exactamente.

Y2ok Y2ok
20 oct 2011 22:32:41

Mmm... eso es diferente de tu comentario a continuación. Entonces, a menos que mi respuesta editada responda a tu pregunta, sigo confundido sobre lo que necesitas.

Chip Bennett Chip Bennett
20 oct 2011 22:41:49
Todas las respuestas a la pregunta 2
8
12

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.

20 oct 2011 22:16:37
Comentarios

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?

Y2ok Y2ok
20 oct 2011 22:23:08

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

Chip Bennett Chip Bennett
20 oct 2011 22:33:08

Hola, sí, ¿podrías ayudarme con eso?

Y2ok Y2ok
20 oct 2011 22:36:56

Ver respuesta editada.

Chip Bennett Chip Bennett
20 oct 2011 22:40:22

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.

Y2ok Y2ok
20 oct 2011 22:46:40

¿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?

Chip Bennett Chip Bennett
20 oct 2011 22:49:45

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

Y2ok Y2ok
20 oct 2011 22:55:49

¿Puedes explicar de dónde diablos viene "el slug de la categoría es 'motorbike'"?

Chip Bennett Chip Bennett
20 oct 2011 22:57:35
Mostrar los 3 comentarios restantes
1
// 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 );
28 jul 2016 21:40:36
Comentarios

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

fuxia fuxia
28 jul 2016 21:58:37