Получить 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(), потому что в предыдущем примере он всегда будет получать информацию о вас, когда вы находитесь на странице категории Б.


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

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


вопрос «как получить идентификатор кота внутри шаблона» открыт для другой интерпретации. внутри одного поста вы правы. он работает внутри цикла для получения категорий одного сообщения; однако, 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);

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 (,) должны быть некоторые соображения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.