如何在模板中获取猫的ID。非常重要:
我不能用这个名字来做,因为我们有多个同名的多毛猫。只有the不同。
但是就像我说的那样:我不能使用Cat标题.....

#1 楼

$wp_query->get_queried_object()将为您提供“当前查询的对象”。在类别档案库中,这是类别对象,在作者页面中,这是作者,在单个帖子上,这是帖子本身,...好了,您就明白了。如果只需要ID,也可以使用$wp_query->get_queried_object_id()

#2 楼

根据我的搜索,您必须使用:

$category = get_queried_object();
echo $category->term_id;


评论


我认为您收到了否决票,是因为您没有说明这样做有什么帮助,而只是说明了这一点。您可能需要检查该功能的来源,并将结果作为编辑添加到答案中。提示:如果评论需要比您的答案更长,那么它应该是评论:)

– kaiser
17-2-4在12:44

#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(,)运算符时显然需要一些注意事项。