WordPress - 获取当前分类的父分类

6
在category.php中,如何测试一个分类是否有父分类?
假设父分类为A,子分类为B,用户加载了B分类的URL,我想要测试它是否有父分类A,如果有则运行相应的代码。
我已经找到了get_category_parents标签,但它似乎返回的是链接列表而不是数组:
get_category_parents($cat, TRUE, ', '));

即使我得到了数组,我也不确定用于针对其进行测试的php函数(php新手)是什么。

谢谢!

3个回答

11

您可以使用cat_is_ancestor_of函数来检查一个分类是否是另一个分类的子分类。例如,要检查当前分类是否是名为“blog”的分类的子分类:

cat_is_ancestor_of(get_cat_id('blog'), get_query_var('cat'))

category.php(或任何单个类别模板)中,您可以使用全局变量$cat来检索当前类别的ID。因此,您可以检查cat_is_ancestor_of(ID, $cat)。使用ID通常是更好的方法,因为它们在重命名名称/ slug /任何内容时不会更改。 - rob_st

2
首先,您需要获取当前类别的ID:
$category_id = get_query_var('cat');

然后您可以进行数据库查询,以查看它是否有父级:

$parent = $wpdb->get_var("SELECT parent FROM ".$wpdb->prefix."term_taxonomy WHERE term_id = $category_id");

如果存在$parent,则它将包含一级父级的ID,自然其值应大于0,您可以像下面这样进行检查:
<?php if ($parent > 0 ) : ?>
// do something
<?php endif; ?>

您可以根据需要自由使用$parent;
$parent_link = get_category_link( $parent );
$parent_name = get_cat_name( $parent );
// etc.

如果你想查看更高级别的父类,可以使用相同的方式(数据库查询)通过父类ID或编写递归函数来一直向上查找到顶层。根据源代码,内置的get_category_parents()函数就是这样实现的。
希望对你有所帮助。

0

请查看get_category_parents的参考页面,当您将第二个参数设置为TRUE时,您正在请求链接。

您应该这样做:

    get_category_parents($cat, FALSE, ', '));

我还建议不要使用空格作为分隔符,因为您可能需要稍后修剪这些空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接