Answers:
根据我的搜索,您必须使用以下代码:
$category = get_queried_object();
echo $category->term_id;
除非我对这个问题有误解,否则我认为您也可以将类别id /子句添加到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()
在类别存档页面中无法获取类别ID,结果将是任意的。
get_the_category()
确实在category.php中起作用
上面的大多数示例都可以使用,但是如果您使用多个类别,则其他方法的NONE (截至撰写时为WP 3.6版)可以使用所有已传递给“ cat”或“ category_name”的类别。
我发现的唯一方法是从中提取数据:
$wp_query->query['category_name']
由于某种原因,这将返回一个不同的值,get_query_var( 'category_name' )
该值仅返回第一个类别。
当使用多个类别时,您将必须使用一些功能,例如explode
获取类别子弹数组,然后循环遍历以获取所有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
?>
显然,使用AND(+)或OR(,)运算符时需要考虑一些注意事项。