Obter ID da categoria no modelo de categoria

22

como obtenho a identificação do gato dentro do modelo. Muito importante: não posso fazê-lo pelo nome, porque temos vários gatos com o mesmo nome. Somente a lesma é diferente. Se eu pegasse a lesma, estaria tudo bem também. Mas como eu disse: não posso usar o título Cat .....

Laura
fonte

Respostas:

40

$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().

Jan Fabry
fonte
9

com base na minha pesquisa, você deve usar isto:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
fonte
Suponho que você recebeu o voto negativo, porque não está explicando por que isso ajuda, apenas afirmando que isso acontece. Você pode querer inspecionar a fonte dessa função e adicionar seus resultados como edição à sua resposta. Dica: Se um comentário precisa ser maior do que a sua resposta, então ele deve ter sido um comentário :)
kaiser
7

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 .

Stephen Cronin
fonte
Esta não é uma solução viável, pois retorna todas as categorias para todas as postagens na página dessa categoria. Seu resultado ecoado retorna a categoria inicial da última postagem na lista.
Cj5
4

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); ?>>

fonte
4

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.

O WebMacheter
fonte
2

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.

VicePrez
fonte
a pergunta 'como obtenho a identificação do gato dentro do modelo' está aberta a diferentes interpretações. dentro de um único modelo de postagem, você está certo. funciona dentro do loop para obter categorias de um único post; no entanto, 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.
Michael
@ Michael diz verdade. @ Jan parece ter dado uma resposta mais apropriada em relação a esse 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
fonte
1
Por favor, explique por que isso poderia resolver o problema. Um trecho de código não é uma resposta.
fuxia
0

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 explodeobter 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 (,).

acSlater
fonte