Respostas:
$wp_query->get_queried_object()
fornecerá o "objeto atualmente consultado". Em um arquivo de categorias, este é o objeto de categoria, em uma página de autor, este é o autor, em uma única postagem, essa é a própria publicação, ... bem, você entendeu a idéia. Se você deseja apenas o ID, também pode usar $wp_query->get_queried_object_id()
.
com base na minha pesquisa, você deve usar isto:
$category = get_queried_object();
echo $category->term_id;
Umm, ainda não posso comentar, mas a resposta do VicePrez funciona. O seguinte funciona bem em uma página de arquivo de categoria (embora você provavelmente queira fazer algo diferente de apenas fazer eco):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
EDIT: Raspe isso, funcionou para mim até me deparar com uma categoria que não tinha um post e, em seguida, selecionou a subcategoria em vez da categoria principal. Você não pode confiar em get_the_category em uma página de modelo de categoria .
A menos que eu esteja entendendo mal a pergunta, acho que você também pode adicionar a categoria id / slug à classe body:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
A resposta de @Jan Fabry é, na verdade, a resposta correta, eis o porquê: Como o Wordpress permite várias categorias para um post, o uso $category = get_the_category()
e a consulta $category[0]
não funcionarão em todos os casos, pois o que você está realmente fazendo é pedir a primeira categoria do primeiro post. Imagine que você tem as categorias A, B e C. Se você tem apenas um post, ele tem as categorias A e B e você está na página de categorias de B, você pode terminar com as informações de A.
É por isso que é melhor usar $category = $wp_query->get_queried_object()
, porque no exemplo anterior, você sempre obtém as informações de B quando você está na página de categorias de B.
Você poderia usar get_the_category()
para fazer isso.
Exemplo:
<?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;
?>
Você poderia usar:
<?php
echo '<pre>';
print_r($category);
echo '</pre>';
?>
para visualizar a matriz de objetos retornados.
get_the_category()
não funcionará em uma página de arquivamento de categoria para obter o ID da categoria; o resultado seria arbitrário.
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);
A maioria dos exemplos acima funciona, mas se você estiver usando várias categorias NENHUM (até o momento, o WP versão 3.6) dos outros métodos funcionará para obter todas as categorias que foram passadas para "cat" ou "category_name".
A única maneira que encontrei é extrair os dados de:
$wp_query->query['category_name']
Por algum motivo, isso retorna um valor diferente para o get_query_var( 'category_name' )
qual retorna apenas a primeira categoria.
Ao usar várias categorias, você terá que usar alguma função, como explode
obter uma matriz de slugs de categoria, depois percorrer isso para obter todos os IDs:
<?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, precisa haver algumas considerações ao usar operadores AND (+) ou OR (,).