Respuestas:
$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()
.
basándome en mi búsqueda debes usar esto:
$category = get_queried_object();
echo $category->term_id;
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 .
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); ?>>
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.
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.
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.
get_the_category()
funciona dentro de category.php
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
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 explode
obtener 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 (,).