Відповіді:
$wp_query->get_queried_object()
дасть вам "об'єкт, що запитується в даний момент". У архіві категорій це об’єкт категорії, на сторінці автора це автор, на одній публікації це сама публікація, ... ну, ви отримуєте ідею. Якщо ви хочете лише ідентифікатор, ви також можете використовувати $wp_query->get_queried_object_id()
.
На основі мого пошуку ви повинні використовувати це:
$category = get_queried_object();
echo $category->term_id;
Гм, я поки що не можу коментувати, але відповідь Віце-Прес справді працює. На сторінці архіву категорій наведено наступні відомості (хоча, ймовірно, ви хочете зробити щось інше, ніж просто повторити це):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
РЕДАКТИРУЙТЕ: Почеркніть, це працювало на мене, поки я не натрапив на категорію, в якій не було посади, а потім він підняв підкатегорію замість основної категорії. Ви не можете розраховувати на get_the_category на сторінці шаблону категорії .
Якщо я не розумію питання, я думаю, ви також можете додати категорію id / slug до класу body:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
@Jan Fabry відповідь насправді є правильною відповіддю, ось чому: Оскільки Wordpress дозволяє декілька категорій для публікації, використання $category = get_the_category()
та запит $category[0]
не працюватимуть у кожному випадку, оскільки те, що ви насправді робите, - це просити першу категорію першого повідомлення. Уявіть, що у вас є категорії A, B і C. Якщо у вас є лише одна посада, вона містить категорії A і B, і ви перебуваєте на сторінці категорії B, ви можете замість цього отримати інформацію A.
Ось чому це краще використовувати $category = $wp_query->get_queried_object()
, оскільки в попередньому прикладі ви завжди отримаєте інформацію B, коли ви знаходитесь на сторінці категорії B.
Ви можете використовувати 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()
не буде працювати на сторінці архіву категорій, щоб отримати ідентифікатор категорії, результат був би довільним.
get_the_category()
працює в категорії.php
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
Більшість наведених вище прикладів працює, але якщо ви використовуєте декілька категорій НІКОЛИ ( з моменту написання, 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 (,).