在类别模板中获取类别ID


22

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

Answers:


40

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


9

根据我的搜索,您必须使用以下代码:

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

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

7

嗯,我不能发表评论,但是VicePrez的回答确实有用。以下内容在类别存档页面上可以正常工作(尽管您可能只想做一些事情而不是回显它):

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>

编辑:从头开始,它对我有用,直到我遇到一个没有帖子的类别,然后它选择了子类别而不是主要类别。您不能依赖类别模板页面上的get_the_category


这不是可行的解决方案,因为它会返回该类别页面上所有帖子的所有类别。您回显的结果将返回列表中最新帖子的初始类别。
cj5

4

除非我对这个问题有误解,否则我认为您也可以将类别id /子句添加到body类中:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

4

@Jan Fabry的回答实际上是正确的答案,原因如下:由于Wordpress允许帖子具有多个类别,因此在每种情况下都无法使用$category = get_the_category()和查询$category[0],因为您实际上是在要求第一篇帖子的第一类。想象一下,您具有A,B和C类别。如果您只有一个帖子,则具有A和B类别,并且您位于B的类别页面中,那么您可能最终得到A的信息。

这就是为什么最好使用的原因$category = $wp_query->get_queried_object(),因为在上一个示例中,当您进入B的类别页面时,它将始终为B提供信息。


2

您可以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,结果将是任意的。
迈克尔

@迈克尔真实地说。@Jan似乎已针对该特定上下文给出了更合适的答案。
VicePrez

1
get_the_category()确实在category.php中起作用
Lea Cohen

0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);

1
请解释为什么这可以解决问题。代码段不是答案。
fuxia

0

上面的大多数示例都可以使用,但是如果您使用多个类别,则其他方法的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(,)运算符时需要考虑一些注意事项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.