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


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

回答:


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 '子供なし'; }
user29489 2013年

@ user29489そうですね、答えがはっきりしませんでした。今後の参考のために編集。
モントリオール主義者、2013年

1
子があるかどうかを知るだけで、子の用語のデータを取得する必要がない場合は、子'field' => 'count'の数を数えるだけに追加することをお勧めします。
JD

これは通常の投稿カテゴリでも機能しますか?
ピート


1

子を持っているかどうかを示す用語のみを表示するように用語をフィルター処理しようとしていると想定するとchildlessget_terms()関数でパラメーターを実際に使用できます。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.