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

22

¿Cómo obtengo la ID del gato dentro de la plantilla? Muy importante: no puedo hacerlo por el nombre, porque tenemos varios gatos con el mismo nombre. Solo la babosa es diferente. Si recibiera la babosa, también estaría bien. Pero como dije: no puedo usar el título de Cat .....

Laura
fuente

Respuestas:

40

$wp_query->get_queried_object()le dará el "objeto consultado actualmente". 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 sola publicación, esta es la publicación en sí misma ... bueno, se entiende la idea. Si solo desea la identificación, también puede usarla $wp_query->get_queried_object_id().

Jan Fabry
fuente
9

basándome en mi búsqueda debes usar esto:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
fuente
Supongo que recibió el voto negativo porque no está explicando por qué ayuda, simplemente afirmando que sí. Es posible que desee inspeccionar la fuente de esa función y agregar sus resultados como edición a su respuesta. Sugerencia: Si un comentario necesita ser más largo que su respuesta, entonces debería haber sido un comentario :)
kaiser
7

Umm, todavía no puedo comentar, pero la respuesta de VicePrez funciona. Lo siguiente funciona bien en una página de archivo de categoría (aunque probablemente desee hacer algo más que simplemente repetirlo):

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

EDITAR: tacha eso, funcionó para mí hasta que encontré una categoría que no tenía una publicación, luego recogió la subcategoría en lugar de la categoría principal. No puede confiar en get_the_category en una página de plantilla de categoría .

Stephen Cronin
fuente
Esta no es una solución viable, ya que devuelve todas las categorías para todas las publicaciones en esa página de categoría. Su resultado repetido devuelve la categoría inicial de la última publicación de la lista.
cj5
4

A menos que haya entendido mal la pregunta, creo que también puede agregar la categoría id / slug a la clase de cuerpo:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

fuente
4

La respuesta de @Jan Fabry es en realidad la respuesta correcta, esta es la razón: dado que Wordpress permite varias categorías para una publicación, el uso $category = get_the_category()y la consulta $category[0]no funcionarán en todos los casos, ya que lo que realmente está 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, tiene las categorías A y B y estás dentro de la página de categorías de B, puedes terminar con la información de A.

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

El WebMacheter
fuente
2

Podrías get_the_category()hacer eso.

Ejemplo:

<?php

$category = get_the_category(); 

// use this to echo the slug
echo $category[0]->slug;

// use this to echo the cat id
echo $category[0]->cat_ID;

// if you've got multiple categories you can run a foreach loop like so
foreach ( $category as $cat ) :

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

endforeach;

?>

Podrías usar:

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

para ver la matriz de objetos que se devuelven.

VicePrez
fuente
La pregunta '¿cómo obtengo la identificación del gato dentro de la plantilla? está abierta a diferentes interpretaciones. dentro de una sola plantilla de publicación, tienes razón. funciona dentro del ciclo para obtener categorías de una sola publicación; sin embargo, get_the_category()no funcionará en una página de archivo de categoría para obtener la identificación de la categoría, el resultado sería arbitrario.
Michael
@Michael cierto decir. @ Jan parece haber dado una respuesta más apropiada en relación con ese contexto específico.
VicePrez
1
get_the_category()funciona dentro de category.php
Lea Cohen
0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
KaramBirKamboj
fuente
1
Por favor explique por qué eso podría resolver el problema. Un fragmento de código no es una respuesta.
fuxia
0

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

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 al get_query_var( 'category_name' )que solo devuelve la primera categoría.

Cuando use varias categorías, tendrá que usar algunas funciones, como explodeobtener una serie de babosas de categoría, luego recorrerlas para obtener todas las ID:

<?php
global $wp_query;

//grab all categories from query string (if using `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));

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

//loop through all the slugs
foreach($category_slugs_array as $category_slug)
{
    //get category object using slug
    $category = get_category_by_slug( $category_slug );

    //check to make sure a matching category has been found
    if(isset($category->cat_ID))
    {
        $categories[] = $category;
        $category_ids[] = $category->cat_ID;
    }
}

var_dump($categories); //array of categories
var_dump($category_ids); //array of category IDs

?>

Obviamente, debe haber algunas consideraciones al usar los operadores AND (+) u OR (,).

acSlater
fuente