获取活动页面的当前类别ID


76

希望在WordPress中提取特定页面的类别ID,该ID列出了使用该特定类别的所有帖子。尝试以下内容,但不起作用。我可以使用获取类别名称single_term_title

$category = single_term_title("", false);
$catid = get_cat_ID( $category );

$category例如显示“娱乐”。但是我还需要“娱乐”的ID。我将如何处理?


它是普通类别页面还是自定义页面模板?
paislee,2012年

这是一种自定义分类法-尝试在名为taxonomy-event-categories-entertainment.php
RonnieT

Answers:


70

您可以尝试使用get_the_category()

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;

16
$ category [0]-> cat_ID是准确的。
nemesisdesign 2012年

56
此方法实际上检查页面上第一篇文章的第一类。如果没有帖子,或者第一个帖子具有多个类别,这将失败或返回错误信息。
Jordan Eldredge 2012年

5
我同意@JordanEldredge,这将返回错误的信息。
法案

3
这将返回页面第一篇文章的第一类。
Shaffe 2014年

如果查看的页面是子类别,也会失败。检查$categories数组的输出。
egdavid 2014年

192

如果是类别页面,则可以通过以下方式获取当前类别的ID:

$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;

如果要获取任何页面上任何特定类别的类别ID,请尝试使用:

$category_id = get_cat_ID('Category Name');

3
正是我想要的。如果要创建一个通用的Category模板,那将比上面的答案更好,因为您只会得到Category,因此页面将显示,而不是上面的multi-Category数组。
theflowersoftime's

它对我来说很完美。我在获取ID时遇到了问题,并且对我来说很可爱。节省时间:)
prakashchhetri

3
需要替换正确答案!答案标记为正确,误导了我。
Mosh Feu 2014年

13
这个答案有一些不必要的代码。代码的第一行使用一个参数-CATEGORY ID(因为这是get_query_var('cat')返回的内容)在get_category函数中获取完整类别数据。第二行代码实际上是从数据中检索ID。这意味着get_category函数在这里是完全未使用的,如果有人只想要id,则应该只使用get_query_var('cat')!
BartoszGórski2014年

谢谢,这对我也有帮助!
詹森·埃利斯

36

您可以使用的最古老但最快的方法是:

$cat_id = get_query_var('cat');

这似乎很完美。Ram Mehar Deswal的答案有什么弊端吗?
2014年

这实际上是可行的解决方案,它将显示所查看页面的类别。
egdavid 2014年

1
@dewd在Ram Mehar Deswal的答案中寻找BartoszGórski的评论。他完全正确,这个答案就可以满足您的所有需求。
honk31年

@ honk31 thx,向我指出您是个好公民!:)
露水2015年

get_query_var('cat')对我来说是虚假的
Dominic

21

我使用get_queried_object函数在category.php模板页面上获取当前类别。

$current_category = get_queried_object();

Jordan Eldredge是正确的,get_the_category在这里不合适。


1
很好,以前从未看过。
Drew Baker

如果结果不是预期的结果,请调用wp_reset_query();以恢复默认的WP_Query实例。
Shaffe 2015年

实际上,这是我找到的最有用的Wordpress功能。它可在任何地方使用:页面,文章,类别等
frodeborli

4

我认为上面的某些方法可能有效,但是使用get_the_category函数似乎很棘手,可能会产生意外的结果。

我认为在类别页面中访问猫ID的最直接,最简单的方法是:

$wp_query->query_vars['cat']

干杯


完善!谢谢。
贝妮

1

我在寻找您的确切要求时发现了这个问题。不幸的是,您接受了错误的答案。为了其他想要实现我们所要实现的目标的人,我想我会发布正确的答案。

$cur_cat = get_cat_ID( single_cat_title("",false) );

正如您所说的single_term_title("", false);是正确返回类别标题,我不确定为什么您的代码会遇到麻烦;但是上面的代码对我来说是完美的。


1

我在类别模板页面中将其用于面包屑:

$cat_obj = $wp_query->get_queried_object();
$thiscat_id = $cat_obj->term_id;
$thiscat = get_category($thiscat_id);
$parentcat = get_category($thiscat->parent);


1

如果您需要类别ID,则可以通过get_query_var获得它,该ID能够检索所有公共可查询变量。

$category_id = get_query_var('cat');

这是获取类别名称的示例

$category_name = get_query_var('category_name');

当然还有所有强大的get_queried_object

$queried_object = get_queried_object();

返回完整的分类术语术语对象(在分类归档页面上使用时。)


0
$cats = wp_get_post_terms( $post->ID, 'product_cat' );
foreach($cats as $cat){
/*check for category having parent or not except category id=1 which is wordpress default category (Uncategorized)*/
  if($cat->parent != '0' && $cat->term_id != 1){
    echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">'.$cat->name.'</a></h2>';
    break;
  }
}

0

上面尝试过用于查找帖子的目录ID的解决方案,但没有任何效果,请改用以下内容:

$obj = get_queried_object();
$c_id = wp_get_post_categories($obj->ID);
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.