检查当前类别是否有子级


11

我需要告诉我正在查看的当前自定义分类存档页面是否具有子类别。我遇到的情况是,有很多带有孩子的自定义类别,并且该站点仅在行尾显示帖子。否则,它应该显示指向下一步的类别的链接。我已经找到了此代码段,但它似乎不适用于自定义分类法。

function category_has_children() {
global $wpdb;   
$term = get_queried_object();
$category_children_check = $wpdb->get_results(" SELECT * FROM wp_term_taxonomy WHERE parent = '$term->term_id' ");
    if ($category_children_check) {
        return true;
    } else {
       return false;
    }
}   

<?php
    if (!category_has_children()) {
        //use whatever loop or template part here to show the posts at the end of the line
   get_template_part('loop', 'index'); 
       }   

    else {
       // show your category index page here
    }
?>

Answers:


10

可能有或没有更好的方法来执行此操作,但是这是我的操作方法:

$term = get_queried_object();

$children = get_terms( $term->taxonomy, array(
'parent'    => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // uncomment to examine for debugging
if($children) { // get_terms will return false if tax does not exist or term wasn't found.
    // term has children
}

如果当前分类术语有子级,则该get_terms函数将返回一个数组,否则将返回false

已通过用于CPT生成的“ 自定义帖子类型” UI插件进行测试并在我的本地香草安装上工作。


当我取消注释print_r($ children)....时,它输出一个数组。那怎么可能变成if / else?抱歉,我对php还是很
陌生

1
不理我用这个:if($ children){echo'Children Here'; } else {echo'No Children'; }
user29489

@ user29489你是对的,我的回答还不够清楚。编辑以供将来参考。
蒙特利尔,

1
对于那些只需要知道是否有子代并且不需要获取子代项数据的用户,我建议添加'field' => 'count'以仅计算子代数。
JD

这也适用于普通职位类别吗?
皮特


1

假设您试图过滤术语以仅显示具有或不具有子代的术语,则实际上可以在childless函数中使用该参数get_terms()

$children = get_terms( 
    'taxonomy' => '$taxonomy_slug',
    'hide_empty' => false,
    'childless' => true
  ) 
);

这将输出一系列没有子项的术语。

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.