web-dev-qa-db-fra.com

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

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 .....

20
Laura

$wp_query->get_queried_object() vous donnera "l'objet actuellement demandé". 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().

39
Jan Fabry

base sur ma recherche, vous devez utiliser ceci:

$category = get_queried_object();
echo $category->term_id;
7
Mahdi Majidzadeh

Euh, 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’échanger):

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

EDIT: Scratch ça, cela a fonctionné pour moi jusqu'à ce que je tombe sur une catégorie qui n'a pas de message, puis il a ramassé 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 .

7
Stephen Cronin

La réponse de @Jan Fabry est en fait la bonne réponse. Voici pourquoi: Wordpress autorisant plusieurs catégories pour une publication, utiliser $category = get_the_category() et interroger $category[0] ne fonctionnera pas dans tous les cas, puisque vous demandez en fait la première catégorie de la première publication. . 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 êtes dans la page de catégorie de B, vous pouvez vous retrouver avec les informations de A à la place.

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

4
The WebMacheter

À 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); ?>>
3
user2015

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 qui sont retournés.

2
VicePrez
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
0
KaramBirKamboj

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 fonctionnent pour obtenir toutes les catégories qui ont été passées à " chat "ou" nom de catégorie ".

Le seul moyen que j'ai trouvé est d'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.

Lorsque vous utilisez plusieurs catégories, vous devrez utiliser une fonction telle que explode pour obtenir un tableau de slugs de catégorie, 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

?>

De toute évidence, il faut tenir compte de certaines considérations lors de l’utilisation des opérateurs AND (+) ou OR (,).

0
acSlater