Obtenha o ID da categoria dentro do modelo de categoria

16

como obtenho o ID do gato dentro do modelo. Muito importante: Eu não posso fazer isso pelo nome, porque temos vários gatos com o mesmo nome. Apenas a lesma é diferente. Se eu pegasse a lesma, tudo ficaria bem também. Mas como eu disse: eu não posso usar o título do gato .....

    
por Laura 29.05.2011 / 20:41
fonte

8 respostas

35

$wp_query->get_queried_object() fornecerá o "objeto atualmente consultado". Em um arquivo de categoria este é o objeto de categoria, em uma página de autor, este é o autor, em um único post, esta é a própria postagem, ... bem, você obtém a idéia. Se você quer apenas o ID, você também pode usar $wp_query->get_queried_object_id() .

    
por Jan Fabry 29.05.2011 / 22:06
fonte
5

Umm, eu não posso comentar ainda, mas a resposta do VicePrez funciona. O seguinte funciona muito bem em uma página de arquivo de categoria (embora você provavelmente queira fazer algo diferente de apenas ecoar):

<?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, então pegou a subcategoria em vez da categoria principal. Você não pode confiar em get_the_category em uma página de modelo de categoria .

    
por Stephen Cronin 01.07.2011 / 14:53
fonte
5

base na minha pesquisa, você deve usar isto:

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

A resposta de @Jan Fabry é realmente a resposta correta, eis o porquê: Como o Wordpress permite várias categorias para um post, usar $category = get_the_category() e consultar $category[0] não funcionará em todos os casos, já que o que você está fazendo é pedir a primeira categoria do primeiro post. Imagine que você tem as categorias A, B e C. Se você tiver apenas uma postagem, ela tem as categorias A e B e você está dentro da página da categoria de B, você pode acabar com as informações de A.

É por isso que é melhor usar $category = $wp_query->get_queried_object() , porque no exemplo anterior você sempre obterá as informações de B quando estiver na página da categoria de B.

    
por The WebMacheter 12.07.2011 / 19:26
fonte
3

A menos que eu esteja entendendo mal a questão, acho que você também pode adicionar o id / slug da categoria à classe body:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
    
por George 30.05.2011 / 00:51
fonte
2

Você pode 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ê pode usar:

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

para visualizar a matriz de objetos que são retornados.

    
por VicePrez 29.05.2011 / 21:51
fonte
0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

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

A maioria dos exemplos acima funciona, mas se você estiver usando várias categorias NONE (a partir da escrita, WP versão 3.6) dos outros métodos funcionam para obter todas as categorias que foram passadas para " cat "ou" category_name ".

A única maneira que encontrei é puxar os dados de:

$wp_query->query['category_name']

Por algum motivo, isso retorna um valor diferente para get_query_var( 'category_name' ) , que retorna apenas a primeira categoria.

Ao usar várias categorias, você terá que usar alguma função como explode para obter um array de slugs de categoria, e percorrê-la para pegar 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, é necessário haver algumas considerações ao usar operadores AND (+) ou OR (,).

    
por acSlater 23.09.2013 / 12:37
fonte

Tags