Obtener el ID de categoría dentro de la plantilla de categoría

29 may 2011, 21:41:37
Vistas: 88.6K
Votos: 27

¿Cómo obtengo el ID de la categoría dentro de la Plantilla? Muy importante: No puedo hacerlo por el nombre, porque tenemos múltiples categorías con el mismo nombre. Solo el slug es diferente. Si pudiera obtener el slug, también estaría bien. Pero como dije: No puedo usar el título de la categoría.....

0
Todas las respuestas a la pregunta 9
0
43

$wp_query->get_queried_object() te dará el "objeto actualmente consultado". En un archivo de categoría este es el objeto de categoría, en una página de autor este es el autor, en una publicación individual esta es la publicación misma... bueno, ya entiendes la idea. Si solo quieres el ID también puedes usar $wp_query->get_queried_object_id().

29 may 2011 23:06:39
1
20

basado en mi búsqueda, debes usar esto:

$category = get_queried_object();
echo $category->term_id;
4 feb 2017 10:45:53
Comentarios

Supongo que recibiste el voto negativo porque no estás explicando por qué ayuda, solo afirmando que lo hace. Podrías inspeccionar el código fuente de esa función y añadir tus hallazgos como edición a tu respuesta. Pista: Si un comentario necesita ser más largo que tu respuesta, entonces debería haber sido un comentario :)

kaiser kaiser
4 feb 2017 14:44:58
1

No puedo comentar todavía, pero la respuesta de VicePrez sí funciona. Lo siguiente funciona bien en una página de archivo de categoría (aunque probablemente quieras hacer algo más que solo mostrarlo):

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>

EDITADO: Olvida eso, funcionó para mí hasta que me encontré con una categoría que no tenía una publicación, entonces tomó la subcategoría en lugar de la categoría principal. No puedes confiar en get_the_category en una página de plantilla de categoría.

1 jul 2011 15:53:16
Comentarios

Esta no es una solución viable ya que devuelve todas las categorías de todos los posts en esa página de categoría. El resultado que muestras devuelve la categoría inicial del último post en la lista.

cj5 cj5
21 nov 2017 19:34:51
0

A menos que esté malinterpretando la pregunta, creo que también puedes añadir el ID/slug de la categoría a la clase del body:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
30 may 2011 01:51:48
0

La respuesta de @Jan Fabry es en realidad la correcta, aquí está el porqué: Dado que WordPress permite múltiples categorías para una publicación, usar $category = get_the_category() y consultar $category[0] no funcionará en todos los casos, ya que lo que realmente estás haciendo es pedir la primera categoría de la primera publicación. Imagina que tienes las categorías A, B y C. Si solo tienes una publicación, que tiene las categorías A y B, y estás dentro de la página de la categoría B, podrías terminar con la información de A en lugar de la de B.

Por eso es mejor usar $category = $wp_query->get_queried_object(), porque en el ejemplo anterior siempre te dará la información de B cuando estés dentro de la página de la categoría B.

12 jul 2011 20:26:34
3

Podrías usar get_the_category() para hacer eso.

Ejemplo:

<?php

$category = get_the_category(); 

// usa esto para mostrar el slug
echo $category[0]->slug;

// usa esto para mostrar el ID de la categoría
echo $category[0]->cat_ID;

// si tienes múltiples categorías puedes ejecutar un bucle foreach así
foreach ( $category as $cat ) :

    echo '<li>' . $cat->name . '</li>';

endforeach;

?>

Podrías usar:

<?php
    echo '<pre>';
    print_r($category);
    echo '</pre>';
?>

para ver el array de objetos que se devuelve.

29 may 2011 22:51:19
Comentarios

la pregunta 'cómo obtengo el ID de la categoría dentro de la plantilla' está abierta a diferentes interpretaciones. dentro de una plantilla de publicación única, tienes razón. funciona dentro del bucle para obtener las categorías de una publicación única; sin embargo, get_the_category() no funcionará en una página de archivo de categorías para obtener el ID de la categoría, el resultado sería arbitrario.

Michael Michael
30 may 2011 00:00:40

@Michael cierto. @Jan parece haber dado una respuesta más apropiada en relación a ese contexto específico.

VicePrez VicePrez
30 may 2011 00:16:40

get_the_category() sí funciona dentro de category.php

Lea Cohen Lea Cohen
5 jul 2011 11:19:24
1
$category = get_category( get_query_var( 'cat' ) ); // Obtener la categoría actual

$cat_id = $category->cat_ID; // Obtener el ID de la categoría

$catname=explode(",",get_category_parents($cat_id,'',',')); // Obtener nombres de categorías padres separados por comas
print_r($catname); // Mostrar el array resultante
11 ene 2013 13:20:26
Comentarios

Por favor explica por qué eso podría resolver el problema. Un fragmento de código no es una respuesta.

fuxia fuxia
11 ene 2013 14:38:24
0

La mayoría de los ejemplos anteriores funcionan, pero si estás usando múltiples categorías, NINGUNO (al momento de escribir esto, versión WP 3.6) de los otros métodos funciona para obtener todas las categorías que se han pasado a "cat" o "category_name".

Este es el tipo de URL de archivo con múltiples categorías: https://yoursite.com/cateogry/blue+yellow/ (sí, este tipo de URL funciona en cualquier sitio de WordPress pero no se usa mucho)

La única forma que he encontrado es extraer los datos de:

$wp_query->query['category_name']

Por alguna razón, esto devuelve un valor diferente a get_query_var( 'category_name' ), que solo devuelve la primera categoría.

Cuando usas múltiples categorías, tendrás que usar alguna función como explode para obtener un array de slugs de categoría, luego iterar sobre ese array para obtener todos los IDs:

<?php
global $wp_query;

//obtener todas las categorías de la cadena de consulta (si usas `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));

$categories = array();
$category_ids = array();

//iterar sobre todos los slugs
foreach($category_slugs_array as $category_slug)
{
    //obtener el objeto de categoría usando el slug
    $category = get_category_by_slug( $category_slug );

    //verificar que se haya encontrado una categoría coincidente
    if(isset($category->cat_ID))
    {
        $categories[] = $category;
        $category_ids[] = $category->cat_ID;
    }
}

var_dump($categories); //array de categorías
var_dump($category_ids); //array de IDs de categoría

?>

Obviamente, hay que tener en cuenta algunas consideraciones al usar los operadores AND (+) u OR (,).

23 sept 2013 13:37:15
0
add_action( 'loop_start', 'demo_cat_id' );
function demo_cat_id() {

$terms = get_the_terms( get_queried_object_ID(), 'category' );

$term = array_pop( $terms );

echo $term->term_id;

}

También puedes usar get_the_terms dentro de tu plantilla de archivo o archivo de funciones y usar el segundo parámetro para especificar tu taxonomía como categoría.

10 ene 2022 08:12:35