親カテゴリのサブカテゴリを表示するために、 WP Knowledge Base テーマに次のコードがあります。問題は、これが最初の階層レベルでしか機能しないことです。そのため、現在のカテゴリに子があるかどうかを確認するためにif句を変更したいのですが、その方法がわかりません。ありがとう
global $term_meta, $cat, $cat_id, $wp_query;
// Check if the current category is not a first level category
// This will happen if the current category does not have any child
// If this is the case, then we simply show all it's posts
// Instead of the Nice knowledgebase type things
if ( $cat->parent != '0' ) {
$children
が空の配列かどうかに応じてTRUE
またはFALSE
を返す単純な関数呼び出しを使用できます。
/**
* Check if given term has child terms
*
* @param Integer $term_id
* @param String $taxonomy
*
* @return Boolean
*/
function category_has_children( $term_id = 0, $taxonomy = 'category' ) {
$children = get_categories( array(
'child_of' => $term_id,
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
) );
return ( $children );
}
そのため、組み込みのpost
カテゴリのみを使用している場合は、このように関数を呼び出すことができます。category_has_children( 17 );
カスタム分類法をテストする必要がある場合、それはほぼ同じように動作しますが、追加のパラメーター 'taxonomy-slug'を渡すだけで済みます:category_has_children( 7, 'my_taxonomy' );
あなたのIFステートメントでそれを呼び出すには:
if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) )
このための組み込み関数が既にあります。これのためにカスタム関数を作成する必要はありません。この関数は get_term_children()
と呼ばれ、どちらかを返します。
指定された用語に子がある場合は子用語の配列
子用語が見つからない場合は空の配列
分類法が存在しない場合はWP_Error
オブジェクト
このことを念頭に置いて、get_term_children()
を関数でラップし、(条件付きタグのように)ブール値が必要な場合は、返される値に応じてtrueまたはfalseを返します。
function has_term_have_children( $term_id = '', $taxonomy = 'category' )
{
// Check if we have a term value, if not, return false
if ( !$term_id )
return false;
// Get term children
$term_children = get_term_children( filter_var( $term_id, FILTER_VALIDATE_INT ), filter_var( $taxonomy, FILTER_SANITIZE_STRING ) );
// Return false if we have an empty array or WP_Error object
if ( empty( $term_children ) || is_wp_error( $term_children ) )
return false;
return true;
}
分類法がcategory
以外のものであれば、単に関数と正しい分類法の名前に単にidという用語を渡すことができます。条件付きタグの構築と同じように、戻り値が返されます。そうでない場合はfalse.
if ( has_term_have_children( 21 ) ) {
// Do something if term 21 have children
}
子カテゴリの名前を取得します。私は@ Howdy_McGeeの関数をもっと速くて反復的なプロセスのために使いました。
function category_has_children( $term_id = 0, $post_type = 'post', $taxonomy = 'category' ) {
$children = get_categories( array( 'child_of' => $term_id, 'type' => $post_type, 'taxonomy' => $taxonomy, 'order' => 'ASC', 'orderby' => 'name' ) );
if($children){
echo '<ul>';
foreach ($children as $value) {
echo '<li>';
echo '<a href="'.get_bloginfo("siteurl").'/category/'.$value->slug.'" >'.$value->name.'</a>';
echo '</li>';
}
echo '</ul>';
}
}
$cId = get_cat_id('cms'); /* cms is the parent category */
category_has_children($cId, 'post', 'category');
これは、親カテゴリのすべてのサブカテゴリ(子)を一覧表示します。
これは私が使用するものです。変数$ catは、チェックしている場合のカテゴリです。
$categories = get_categories($cat);
if (!empty($categories)) {
// This Category has children
}
else {
// This category has no children
}
カテゴリにサブカテゴリがあるかどうかを確認するには、この関数cat_has_subcat('paste cat id')
を使用します。
//paste it in your function.php
//start
function cat_has_subcat($catId){
$args = array(
'taxonomy' => 'product_cat',
'orderby' => 'name',
'parent' => $catId,
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'title_li' => '',
'hide_empty' => false
);
$cats = get_categories($args);
if(!empty($cats)){
return $catId;
}
}
//end