WordPress技术问询:如何获取当前文章首个分类并判断多父分类?
判断WordPress文章是否有多个父分类
嘿,我懂你的困扰——之前的代码只能判断文章关联的分类数量,但没法区分父分类和子分类,所以没法准确判断是不是有多个父分类对吧?别担心,我们可以利用WordPress分类对象里的parent属性来解决这个问题。
核心思路
WordPress的get_the_category()返回的每个分类对象都有一个parent字段:
- 父分类的
parent值为0 - 子分类的
parent值是它所属父分类的ID
所以我们只需要:
- 获取文章的所有分类
- 过滤出所有
parent为0的分类(也就是真正的父分类) - 统计这些父分类的数量,就能判断是否存在多个父分类了
完整代码示例
// 获取指定文章的所有分类(如果在文章循环内,可省略$post_id参数) $categories = get_the_category($post_id); // 过滤出所有父分类(parent值为0的分类) $parent_categories = array_filter($categories, function($category) { return $category->parent === 0; }); // 判断父分类数量 if (count($parent_categories) > 1) { // 文章有多个父分类的处理逻辑 echo "这篇文章关联了多个父分类"; } elseif (count($parent_categories) === 1) { // 只有一个父分类的处理逻辑 // 把关联数组转成索引数组,方便取第一个元素 $parent_category_array = array_values($parent_categories); $first_parent_category = $parent_category_array[0]; echo "文章的父分类是:" . $first_parent_category->name; } else { // 没有父分类的情况(这种情况通常是分类设置异常,因为子分类必须归属父分类) echo "未找到关联的父分类"; }
为什么之前的代码不生效?
你之前的代码直接取get_the_category($post_id)[0]或[1],但这些元素可能是子分类,它们的parent值不为0,所以没法准确判断父分类的数量。通过array_filter过滤出parent=0的分类,才能精准拿到所有父分类。
额外提示
- 如果是在文章循环中调用,
get_the_category()不需要传$post_id,会自动获取当前文章的分类 array_filter返回的是关联数组,用array_values()转成索引数组后,就可以用[0]来取第一个父分类对象了- 正常情况下,WordPress的子分类必须关联一个父分类,所以“没有父分类”的情况很少见,可能是分类设置有误
内容的提问来源于stack exchange,提问作者Claudio
相关产品推荐
相关产品推荐

