Получить идентификатор категории внутри шаблона категории
8 ответ
- голосов
-
- 2011-05-29
$wp_query->get_queried_object()
предоставит вам «объект,запрашиваемый в данный момент».В архиве категорий это объект категории,на странице автора - автор,в отдельном посте - это сам пост,... ну,вы поняли.Если вам нужен только идентификатор,вы также можете использовать$wp_query->get_queried_object_id()
.$wp_query->get_queried_object()
will give you the "currently queried object". On a category archive this is the category object, on a author page this is the author, on a single post this is the post itself, ... well, you get the the idea. If you only want the ID you can also use$wp_query->get_queried_object_id()
. -
- 2017-02-04
на основе моего поиска вы должны использовать это:
$category = get_queried_object(); echo $category->term_id;
base on my search you must use this:
$category = get_queried_object(); echo $category->term_id;
-
Я предполагаю,что вы получили отрицательный голос,потому что вы не _ объясняете_,почему это помогает,а просто заявляете,что это помогает.Возможно,вы захотите проверить источник этой функции и добавить свои результаты в качестве редактирования в свой ответ.Подсказка: если комментарий должен быть длиннее,чем ваш ответ,то это должен быть комментарий :)I assume you received the downvote because you are not _explaining_ why it helps, just stating that this does. You might want to inspect the source of that function and add your outcomings as edit to your answer. Hint: If a comment needs to be longer than your answer, then it should have been a comment :)
- 0
- 2017-02-04
- kaiser
-
- 2011-07-01
Умм,я пока не могу комментировать,но ответ VicePrez действительно работает.Следующее отлично работает на странице архива категории (хотя вы,вероятно,захотите сделать что-то другое,а не просто повторить его):
<?php $category = get_the_category(); echo $category[0]->cat_ID; ?>
РЕДАКТИРОВАТЬ: Поцарапайте это,у меня это работало,пока я не наткнулся на категорию,в которой не было сообщения,а затем выбрал подкатегорию вместо основной категории. Вы не можете полагаться наget_the_category на странице шаблона категории .
Umm, I can't comment yet, but VicePrez's answer does work. The following works just fine on a category archive page (although you probably want to do something other than just echo it):
<?php $category = get_the_category(); echo $category[0]->cat_ID; ?>
EDIT: Scratch that, it worked for me until I came across a category that didn't have a post, then it picked up the subcategory instead of the main category. You can't rely on get_the_category on a category template page.
-
Это не жизнеспособное решение,поскольку оно возвращает все категории для всех сообщений на странице этой категории.Ваш повторенный результат возвращает начальную категорию последнего сообщения в списке.This is not a viable solution as this returns all the categories for all the posts on that category page. Your echoed result returns the initial category of the latest post in the list.
- 0
- 2017-11-21
- cj5
-
- 2011-05-29
Если я не неправильно понимаю вопрос,я думаю,вы также можете добавить идентификатор/ярлык категории в класс тела:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?> <body <?php body_class($cat_ID); ?>>
Unless I am misunderstanding the question, I think you can also add the category id/slug to the body class:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?> <body <?php body_class($cat_ID); ?>>
-
- 2011-07-12
Ответ @Jan Fabry на самом деле является правильным ответом,вот почему: поскольку Wordpress позволяет использовать несколько категорий для сообщения,используя
$category = get_the_category()
и запрашивая$category[0]
не будет работать во всех случаях,поскольку на самом деле вы запрашиваете первую категорию первого сообщения.Представьте,что у вас есть категории A,B и C. Если у вас есть только одно сообщение,в нем есть категории A и B,и вы находитесь на странице категории B,вместо этого вы можете получить информацию A.Вот почему лучше использовать
$category = $wp_query->get_queried_object()
,потому что в предыдущем примере он всегда будет получать информацию B,когда вы находитесь на странице категории B.@Jan Fabry's response is actually the correct answer, here's why: Since Wordpress allows multiple categories for a post, using
$category = get_the_category()
and querying$category[0]
will not work in every case since what you're actually doing is asking for the first category of the first post. Imagine you have categories A, B and C. If you have only one post, it has categories A and B and you're inside B's category page, you may end up with A's information instead.That's why it's better to use
$category = $wp_query->get_queried_object()
, because in the previous example it will always get you B's information when you're inside B's category page. -
- 2011-05-29
Для этого вы можете использовать
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>'; ?>
для просмотра массива возвращаемых объектов.
You could use
get_the_category()
to do that.Example:
<?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; ?>
You could use:
<?php echo '<pre>'; print_r($category); echo '</pre>'; ?>
to view the array of objects that are returned.
-
вопрос «как мне получить идентификатор кошки внутри шаблона» может интерпретироваться по-разному.в рамках одного шаблона сообщения,вы правы.он работает внутри цикла,чтобы получить категории одного сообщения;однакоget_the_category () не будет работать на странице архива категории для получения идентификатора категории,результат будет произвольным.the question 'how do I get the cat ID inside the Template' is open to different interpretation. within a single post template, you are right. it works inside the loop to get categories of a single post; however,`get_the_category()` will not work in a category archive page to get the category id, the result would be arbitrary.
- 0
- 2011-05-29
- Michael
-
@ Майкл правда сказал.@Jan,похоже,дал более подходящий ответ в отношении этого конкретного контекста.@Michael true say. @Jan seems to have given a more appropriate answer in relation to that specific context.
- 0
- 2011-05-29
- VicePrez
-
get_the_category () работает внутри category.php`get_the_category()` does work inside category.php
- 1
- 2011-07-05
- Lea Cohen
-
- 2013-01-11
$category = get_category( get_query_var( 'cat' ) ); $cat_id = $category->cat_ID; $catname=explode(",",get_category_parents($cat_id,'',',')); print_r($catname);
$category = get_category( get_query_var( 'cat' ) ); $cat_id = $category->cat_ID; $catname=explode(",",get_category_parents($cat_id,'',',')); print_r($catname);
-
Объясните ** почему ** это может решить проблему.Фрагмент кода - это не ответ.Please explain **why** that could solve the problem. A code snippet is not an answer.
- 1
- 2013-01-11
- fuxia
-
- 2013-09-23
Большинство приведенных выше примеров работают,но если вы используете несколько категорий,НИ ОДИН (на момент написания,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 (,) необходимо учитывать некоторые особенности.
Most of the above examples work but if you are using multiple categories NONE (as of writing, WP version 3.6) of the other methods work to get all the categories that have been passed to either "cat" or "category_name".
The only way I have found is to pull the data from:
$wp_query->query['category_name']
For some reason this returns a different value to
get_query_var( 'category_name' )
which only returns the first category.When using multiple categories you will have to use some function like
explode
to get an array of category slugs, then loop through that to grab all the IDs:<?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 ?>
Obviously there needs to be some considerations when using AND (+) or OR (,) operators.
как мне получить идентификатор кошки в шаблоне.Очень важно: Я не могу сделать это по имени,потому что у нас много кошек с таким именем.Только слизняк другой.Если бы я получил пулю,тоже было бы хорошо. Но,как я уже сказал: я не могу использовать название Cat .....