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

22

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 avec le même nom. Seul le limace est différent. Si j'avais la limace, ce serait bien aussi. Mais comme je l'ai dit: je ne peux pas utiliser le titre Cat .....

Laura
la source

Réponses:

40

$wp_query->get_queried_object()vous donnera "l'objet actuellement interrogé". Sur une archive de catégorie, c'est l'objet de catégorie, sur une page d'auteur, c'est l'auteur, sur une seule publication, c'est la publication elle-même, ... eh bien, vous avez l'idée. Si vous ne voulez que l'ID, vous pouvez également l'utiliser $wp_query->get_queried_object_id().

Jan Fabry
la source
10

sur la base de ma recherche, vous devez utiliser ceci:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
la source
Je suppose que vous avez reçu le downvote parce que vous n'êtes pas en train d' expliquer pourquoi il aide, indiquant simplement que cela fait. Vous voudrez peut-être inspecter la source de cette fonction et ajouter vos résultats en tant que modification à votre réponse. Astuce: Si un commentaire doit être plus long que votre réponse, alors il aurait dû être un commentaire :)
kaiser
7

Umm, je ne peux pas encore commenter, mais la réponse de VicePrez fonctionne. Ce qui suit fonctionne très bien sur une page d'archive de catégorie (bien que vous souhaitiez probablement faire autre chose que simplement l'écho):

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

EDIT: Scratch cela, cela a fonctionné pour moi jusqu'à ce que je tombe sur une catégorie qui n'a pas de poste, puis il a repris la sous-catégorie au lieu de la catégorie principale. Vous ne pouvez pas compter sur get_the_category sur une page de modèle de catégorie .

Stephen Cronin
la source
Ce n'est pas une solution viable car cela renvoie toutes les catégories pour tous les messages sur cette page de catégorie. Votre résultat en écho renvoie la catégorie initiale du dernier message de la liste.
cj5
4

À moins que je ne comprenne mal la question, je pense que vous pouvez également ajouter l'identifiant de catégorie / slug à la classe de corps:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

la source
4

La réponse de @Jan Fabry est en fait la bonne réponse, voici pourquoi: Étant donné que Wordpress autorise plusieurs catégories pour un message, l'utilisation $category = get_the_category()et l'interrogation $category[0]ne fonctionneront pas dans tous les cas, car ce que vous faites en fait, c'est la première catégorie du premier message. Imaginez que vous avez les catégories A, B et C. Si vous n'avez qu'un seul poste, il a les catégories A et B et que vous êtes dans la page des catégories de B, vous pouvez vous retrouver avec les informations de A à la place.

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

Le WebMacheter
la source
2

Vous pouvez utiliser get_the_category()pour cela.

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 des objets renvoyés.

VicePrez
la source
la question «comment obtenir l'ID de chat à l'intérieur du modèle» est ouverte à une interprétation différente. dans un seul modèle de publication, vous avez raison. cela fonctionne à l'intérieur de la boucle pour obtenir les catégories d'un seul article; cependant, get_the_category()ne fonctionnera pas dans une page d'archive de catégorie pour obtenir l'ID de catégorie, le résultat serait arbitraire.
Michael
@Michael true say. @Jan semble avoir donné une réponse plus appropriée par rapport à ce contexte spécifique.
VicePrez
1
get_the_category()fonctionne à l'intérieur 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
la source
1
Veuillez expliquer pourquoi cela pourrait résoudre le problème. Un extrait de code n'est pas une réponse.
fuxia
0

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

Le seul moyen que j'ai trouvé est d'extraire les données de:

$wp_query->query['category_name']

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

Lorsque vous utilisez plusieurs catégories, vous devrez utiliser une fonction telle que explodepour obtenir un tableau de slugs de catégorie, puis parcourir cette dernière 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

?>

De toute évidence, il doit y avoir certaines considérations lors de l'utilisation des opérateurs AND (+) ou OR (,).

acSlater
la source