我不能用这个名字来做,因为我们有多个同名的多毛猫。只有the不同。
但是就像我说的那样:我不能使用Cat标题.....
#1 楼
$wp_query->get_queried_object()
将为您提供“当前查询的对象”。在类别档案库中,这是类别对象,在作者页面中,这是作者,在单个帖子上,这是帖子本身,...好了,您就明白了。如果只需要ID,也可以使用$wp_query->get_queried_object_id()
。#2 楼
根据我的搜索,您必须使用:$category = get_queried_object();
echo $category->term_id;
#3 楼
嗯,我不能发表评论,但是VicePrez的回答确实有用。以下内容在类别存档页面上可以正常工作(尽管您可能只想做一些事情而不是回显它):<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
编辑:从头开始,它适用于我直到遇到一个没有帖子的类别,然后它才选择了子类别而不是主要类别。您不能依赖类别模板页面上的get_the_category。
评论
这不是可行的解决方案,因为它会返回该类别页面上所有帖子的所有类别。您回显的结果将返回列表中最新帖子的初始类别。
–cj5
17年11月21日在17:34
#4 楼
除非我对这个问题有误解,否则我认为您也可以将类别id /子句添加到主体类中:<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
#5 楼
@Jan Fabry的回答实际上是正确的答案,原因如下:由于Wordpress允许帖子具有多个类别,因此使用$category = get_the_category()
并查询$category[0]
并非在每种情况下都可行,因为您实际上是在要求第一篇文章的第一类。想象一下,您具有A,B和C类别。如果您只有一个帖子,而具有A和B类别,并且您位于B的类别页面中,那么您可能最终得到A的信息。为什么最好使用$category = $wp_query->get_queried_object()
,因为在前面的示例中,当您进入B的类别页面时,它总是可以获取B的信息。#6 楼
您可以使用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>';
?>
查看返回的对象数组。
评论
“如何在模板中获取猫的ID”这个问题有不同的解释。在单个帖子模板中,您是对的。它在循环内工作以获取单个帖子的类别;但是,get_the_category()在类别存档页面中无法获取类别ID,结果将是任意的。
–迈克尔
2011年5月29日21:00
@迈克尔真实地说。 @Jan似乎已针对该特定上下文给出了更适当的答案。
–VicePrez
11年5月29日在21:16
get_the_category()确实在category.php中起作用
– Lea Cohen
2011年7月5日在8:19
#7 楼
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
评论
请解释为什么这可以解决问题。代码段不是答案。
– fuxia♦
2013年1月11日12:38
#8 楼
上面的大多数示例都可以使用,但是如果您使用多个类别,则其他方法的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(,)运算符时显然需要一些注意事项。
评论
我认为您收到了否决票,是因为您没有说明这样做有什么帮助,而只是说明了这一点。您可能需要检查该功能的来源,并将结果作为编辑添加到答案中。提示:如果评论需要比您的答案更长,那么它应该是评论:)
– kaiser
17-2-4在12:44