获取有无帖子的分类页面ID

时间:2015-02-01 作者:Luis Martins

有没有更好的方法来获取类别ID,它可能会或可能不会分配任何帖子?

目前,im使用以下代码解析页面url,并从其slug中获取类别ID。感觉这不是最好的方式。

$current_url = rtrim($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], "/");
$arr_current_url = split("/", $current_url);
$thecategory = get_category_by_slug( end($arr_current_url) );
$catid = $thecategory->term_id;

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

利用get_queried_object_id() 在您的分类页面中。这将返回类别的ID。

这是一个非常有用的小函数。它将返回:

作者存档页上的作者ID

分类法、标记和类别存档页上的术语ID

单个帖子页面上的帖子ID

页面的页面ID

根据您的答案,您可以将代码简化为以下内容

if ( is_category() ) {

    $catid = get_queried_object_id();

} elseif ( is_single() ) {

    $cats = wp_get_post_terms( get_queried_object_id(), \'category\', array( \'fields\' => \'ids\' ) ); // category object
    $catid = $cats[0];
}
以上代码速度更快,更可靠:-)

SO网友:Luis Martins

实现这一点的一种方法是检查我们是否在分类页或单个帖子上:

if ( is_category() ) {

    $current_url = rtrim($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], "/");
    $arr_current_url = split("/", $current_url);
    $catid = get_category_by_slug( end($arr_current_url) );

} elseif ( is_single() ) {

    $cats = get_the_category(); // category object
    $postcat = end($cats);
    $catid = $cats;
}
对于类别,我们正在解析URL并从其slug中检索类别ID。

在一篇文章中,我们只需使用get_the_category 核心函数,用于检索具有与文章关联的类别的对象,我们从中检索最后一个。

EDIT:以Pieter的代码为例,我只需要做一个小的调整,以选择与该帖子相关的最后一个类别(我假设它是最深的类别),否则就会完美无瑕。

 if ( is_category() ) {

    $catid = get_queried_object_id();

} elseif ( is_single() ) {

    $cats = wp_get_post_terms( get_queried_object_id(), \'category\', array( \'fields\' => \'ids\' ) ); // category object
    $catid = end($cats);

}

结束

相关推荐

将选定列表值(分类)保存在wp中:wp_set_Object_Terms

在我的管理部分,我有其他字段(如价格或品牌-这是分类法)。编辑或创建新零件时,我会设置其他数据。价格节约没有任何问题,但从选择列表中保存值有些奇怪-它没有保存:wp_set_object_terms($post_id, $_POST[\'part_brand\'], \'brands\', true); 根据wp doc:此函数从分类法选择更新值。但对我来说,这不起作用。您可以在此处看到的所有代码:http://pastebin.com/N4gZL3uN如何在wp中保存选择列表(分类法)中的值?