web-dev-qa-db-ja.com

現在のカテゴリに子供がいるかどうかを確認

現在表示しているカスタム分類法アーカイブページに子カテゴリがあるかどうかを確認する必要があります。私は子供を持つカスタムカテゴリがたくさんあり、サイトは行の終わりに投稿を表示するだけであるという状況を持っています。さもなければそれは次のステップダウンであるカテゴリへのリンクを示すべきです。このスニペットを見つけましたが、カスタム分類法ではうまくいかないようです。

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
    }
?>
11
user29489

これを行うよりよい方法があるかもしれないしないかもしれませんが、ここに私がそれをする方法があります:

$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を返します。

カスタムポストタイプUI CPT生成に使用されるプラグインを使用して、私のローカルVanillaインストールをテストし、動作します。

9
montrealist

get_term_children でこれを行う一般的なWP可能性もあります。

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}
8

子を持つか持たない用語のみを表示するように用語をフィルタしようとしていると仮定すると、実際にはget_terms()関数でchildlessパラメータを使用できます。

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

これは子を持たない単語の配列を出力します。

0
Frits