Obtenir l'ID de la catégorie dans le modèle de catégorie

16

comment puis-je obtenir l'ID de chat à l'intérieur du modèle. Très important: Je ne peux pas le faire par le nom, car nous avons plusieurs chats du même nom. Seule la limace est différente. Si j'avais la limace, tout irait bien. Mais comme je l'ai dit: je ne peux pas utiliser le titre de chat .....

    
posée Laura 29.05.2011 - 20:41

8 réponses

35

$wp_query->get_queried_object() vous donnera "l'objet actuellement interrogé". Sur une archive de catégorie, il s'agit de l'objet de catégorie, sur une page d'auteur, c'est l'auteur, sur un seul article, il s'agit de l'article lui-même, ... eh bien, vous voyez l'idée. Si vous ne voulez que l'ID, vous pouvez également utiliser $wp_query->get_queried_object_id() .

    
réponse donnée Jan Fabry 29.05.2011 - 22:06
5

Euh, je ne peux pas encore commenter, mais la réponse de VicePrez fonctionne. Ce qui suit fonctionne parfaitement sur une page d’archive de catégorie (bien que vous souhaitiez probablement faire autre chose que simplement l’échanger):

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

ÉDITER: Grattez-le, cela a fonctionné jusqu'à ce que je tombe sur une catégorie qui n'a pas de message, puis la sous-catégorie a été récupérée au lieu de la catégorie principale. Vous ne pouvez pas utiliser get_the_category sur une page de modèle de catégorie .

    
réponse donnée Stephen Cronin 01.07.2011 - 14:53
5

Sur la base de mes recherches, vous devez utiliser ceci:

$category = get_queried_object();
echo $category->term_id;
    
réponse donnée Mahdi Majidzadeh 04.02.2017 - 09:45
4

La réponse de @Jan Fabry est en fait la bonne réponse. Voici pourquoi: dans la mesure où Wordpress autorise plusieurs catégories pour une publication, utiliser $category = get_the_category() et interroger $category[0] ne fonctionnera pas dans tous les cas, puisque ce que vous êtes en train de faire demande réellement. la première catégorie du premier post. Imaginez que vous ayez les catégories A, B et C. Si vous avez un seul message, les catégories A et B et que vous vous trouvez dans la page des catégories de B, vous pouvez vous retrouver avec les informations de A.

C'est pourquoi il est préférable d'utiliser $category = $wp_query->get_queried_object() , car dans l'exemple précédent, vous obtiendrez toujours les informations de B lorsque vous vous trouverez dans la page de catégorie de B.

    
réponse donnée The WebMacheter 12.07.2011 - 19:26
3

À moins que je ne comprenne mal la question, je pense que vous pouvez également ajouter la catégorie id / slug à la classe body:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
    
réponse donnée George 30.05.2011 - 00:51
2

Vous pouvez utiliser get_the_category() pour le faire.

Exemple:

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

?>

Vous pouvez utiliser:

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

pour afficher le tableau d'objets renvoyés.

    
réponse donnée 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);
    
réponse donnée KaramBirKamboj 11.01.2013 - 12:20
0

La plupart des exemples ci-dessus fonctionnent, mais si vous utilisez plusieurs catégories, NONE (au moment de l'écriture, WP version 3.6) des autres méthodes fonctionne pour obtenir toutes les catégories qui ont été passées à " chat "ou" nom de catégorie ".

Le seul moyen que j'ai trouvé consiste à extraire les données de:

$wp_query->query['category_name']

Pour une raison quelconque, ceci renvoie une valeur différente de get_query_var( 'category_name' ) qui ne renvoie que la première catégorie.

Si vous utilisez plusieurs catégories, vous devrez utiliser une fonction telle que explode pour obtenir un tableau de slugs de catégories, puis parcourez-la pour récupérer tous les 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

?>

Évidemment, l'utilisation des opérateurs AND (+) ou OR (,) doit être prise en compte.

    
réponse donnée acSlater 23.09.2013 - 12:37

Lire d'autres questions sur les étiquettes