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

16

¿Cómo consigo la identificación del gato dentro de la plantilla? Muy importante: No puedo hacerlo por el nombre, porque tenemos varios gatos con el mismo nombre. Sólo la babosa es diferente. Si obtendría la babosa, estaría bien, también. Pero como dije: no puedo usar el título del Gato .....

    
pregunta Laura 29.05.2011 - 20:41

8 respuestas

35

$wp_query->get_queried_object() le dará el "objeto consultado actualmente". En un archivo de categorías, esta es la categoría objeto, en una página de autor, este es el autor, en una sola publicación, esta es la publicación en sí, ... bueno, entiendes la idea. Si solo desea el ID, también puede usar $wp_query->get_queried_object_id() .

    
respondido por el Jan Fabry 29.05.2011 - 22:06
5

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

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

EDITAR: Rasguño eso, funcionó para mí hasta que encontré una categoría que no tenía una publicación, luego seleccionó 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 .

    
respondido por el Stephen Cronin 01.07.2011 - 14:53
5

base en mi búsqueda debes usar esto:

$category = get_queried_object();
echo $category->term_id;
    
respondido por el Mahdi Majidzadeh 04.02.2017 - 09:45
4

La respuesta de @Jan Fabry es en realidad la respuesta correcta, aquí está la razón: ya 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á haciendo es pedir La primera categoría del primer post. 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 en su lugar.

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

    
respondido por el The WebMacheter 12.07.2011 - 19:26
3

A menos que esté malinterpretando 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); ?>>
    
respondido por el George 30.05.2011 - 00:51
2

Puedes usar get_the_category() para 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ía usar:

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

para ver la matriz de objetos que se devuelven.

    
respondido por el VicePrez 29.05.2011 - 21:51
0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
    
respondido por el KaramBirKamboj 11.01.2013 - 12:20
0

La mayoría de los ejemplos anteriores funcionan, pero si está utilizando varias categorías, NINGUNA (en el momento de escribir, WP versión 3.6) de los otros métodos funciona para obtener todas las categorías que se han pasado a cualquiera de ellas " 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 a get_query_var( 'category_name' ) que solo devuelve la primera categoría.

Cuando uses múltiples categorías, deberás usar alguna función como explode para obtener una variedad de babosas de categorías, luego recorre para obtener todos los 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 (,).

    
respondido por el acSlater 23.09.2013 - 12:37

Lea otras preguntas en las etiquetas