Получить ID категории внутри шаблона категории

22

Как я могу получить идентификатор кошки внутри шаблона. Очень важно: я не могу сделать это по имени, потому что у нас есть несколько кошек с тем же именем. Только слизняк отличается. Если бы я получил слизняк, это тоже было бы хорошо. Но, как я уже сказал: я не могу использовать название кота .....

Лаура
источник

Ответы:

40

$wp_query->get_queried_object()даст вам "в настоящее время запрашиваемый объект". В архиве категорий это объект категории, на странице автора это автор, в отдельном посте это сам пост ... ну, вы поняли идею. Если вам нужен только идентификатор, вы также можете использовать $wp_query->get_queried_object_id().

Ян Фабри
источник
9

На основании моего поиска вы должны использовать это:

$category = get_queried_object();
echo $category->term_id;
Махди Маджидзаде
источник
Я предполагаю, что вы получили отрицательный голос, потому что вы не объясняете, почему это помогает, а просто заявляете, что это помогает. Возможно, вы захотите проверить источник этой функции и добавить свои результаты в качестве правки в свой ответ. Подсказка: если комментарий должен быть длиннее вашего ответа, то это должен был быть комментарий :)
kaiser
7

Хм, я пока не могу комментировать, но ответ VicePrez работает. Следующее прекрасно работает на странице архива категории (хотя вы, вероятно, хотите сделать что-то другое, чем просто повторить это):

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

РЕДАКТИРОВАТЬ: поцарапать это, это работало на меня, пока я не наткнулся на категорию, у которой нет поста, затем он выбрал подкатегорию вместо основной категории. Вы не можете полагаться на get_the_category на странице шаблона категории .

Стивен Кронин
источник
Это не жизнеспособное решение, так как оно возвращает все категории для всех сообщений на этой странице категории. Ваш отраженный результат возвращает начальную категорию последнего сообщения в списке.
cj5
4

Если я не неправильно понял вопрос, я думаю, что вы также можете добавить категорию id / slug в класс body:

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

источник
4

Ответ @Jan Fabry на самом деле является правильным ответом, и вот почему: поскольку Wordpress допускает использование нескольких категорий для одного сообщения, использование $category = get_the_category()и запросы $category[0]не будут работать в каждом случае, поскольку в действительности вы запрашиваете первую категорию первого сообщения. Представьте, что у вас есть категории A, B и C. Если у вас есть только один пост, у него есть категории A и B, и вы находитесь на странице категорий B, вы можете получить информацию A вместо этого.

Вот почему его лучше использовать $category = $wp_query->get_queried_object(), потому что в предыдущем примере он всегда будет получать информацию о вас, когда вы находитесь на странице категории Б.

WebMacheter
источник
2

Вы можете использовать get_the_category()для этого.

Пример:

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

?>

Вы можете использовать:

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

просмотреть массив возвращаемых объектов.

VicePrez
источник
вопрос «как получить идентификатор кота внутри шаблона» открыт для другой интерпретации. внутри одного поста вы правы. он работает внутри цикла для получения категорий одного сообщения; однако, get_the_category()не будет работать на странице архива категории, чтобы получить идентификатор категории, результат будет произвольным.
Майкл
@ Майкл правда сказать. @ Ян, кажется, дал более подходящий ответ в связи с этим конкретным контекстом.
VicePrez
1
get_the_category()работает внутри category.php
Леа Коэн
0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
KaramBirKamboj
источник
1
Пожалуйста, объясните, почему это может решить проблему. Фрагмент кода не является ответом.
fuxia
0

Большинство из приведенных выше примеров работают, но если вы используете несколько категорий NONE (на момент написания, WP версии 3.6), другие методы работают, чтобы получить все категории, которые были переданы либо в «cat», либо в «category_name».

Единственный способ, который я нашел, это извлечь данные из:

$wp_query->query['category_name']

По какой-то причине это возвращает другое значение, к get_query_var( 'category_name' )которому возвращается только первая категория.

При использовании нескольких категорий вам нужно будет использовать какую-то функцию, например, explodeчтобы получить массив слагов категорий, а затем выполнить цикл, чтобы получить все идентификаторы:

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

?>

Очевидно, что при использовании операторов AND (+) или OR (,) должны быть некоторые соображения.

acSlater
источник