在类别模板中获取类别ID

时间:2011-05-29 作者:Laura

如何在模板中获取cat ID。非常重要的是:我不能用名字,因为我们有同名的多只猫。只有鼻涕虫不同。如果我得到子弹,也没关系。但就像我说的:我不能用猫的名字。。。。。

8 个回复
SO网友:Jan Fabry

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

SO网友:Mahdi Majidzadeh

根据我的搜索,您必须使用以下内容:

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

SO网友:Stephen Cronin

嗯,我还不能评论,但维切佩雷斯的回答确实有效。以下内容在类别归档页面上可以很好地工作(尽管您可能不想重复它):

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>
EDIT: 从头开始,它对我很有用,直到我遇到一个没有帖子的类别,然后它选择了子类别而不是主类别。You can\'t rely on get_the_category on a category template page.

SO网友:The WebMacheter

@简·法布里的回答实际上是正确的,原因如下:既然Wordpress允许一篇文章有多个类别,那么使用$category = get_the_category() 和查询$category[0] 不会在所有情况下都有效,因为你实际上是在要求第一篇文章的第一个类别。假设你有类别A、B和C。如果你只有一篇文章,它有类别A和B,而你在B的类别页面中,你可能会得到A的信息。

这就是为什么使用$category = $wp_query->get_queried_object(), 因为在前面的示例中,当您在B的分类页面中时,它将始终获取B的信息。

SO网友:VicePrez

你可以使用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>\';
?>
查看返回的对象数组。

SO网友:KaramBirKamboj
$category = get_category( get_query_var( \'cat\' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,\'\',\',\'));
print_r($catname);
SO网友:rmorse

上述大多数示例都有效,但如果您使用多个类别,则其他方法都无法获取已传递给“cat”或“category\\u 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(,)运算符时需要考虑一些因素。

SO网友:Dev

add_action( \'loop_start\', \'demo_cat_id\' );
function demo_cat_id() {

$terms = get_the_terms( get_queried_object_ID(), \'category\' );

$term = array_pop( $terms );

echo $term->term_id;

}
您还可以使用get_the_terms 在存档模板或函数文件中,并使用第二个参数将分类指定为类别。

结束

相关推荐

是否从wp_list_categories中筛选“非活动”类别?

我想在类别编辑器屏幕中添加一个复选框,以允许“停用”类别(可能是在网站所有者处理类别内容和帖子时)。完成此操作后,我可以选择哪些选项来排除设置为“非活动”的类别?我认为可以这样做的一种方法是,只需在wp\\u list\\u类别上运行一个过滤器,然后在exlude=list中插入一个实用程序函数,该函数将返回选中inactive为true的所有cat\\u id。还有其他方法吗?