[wordpress] 現在のカテゴリーの子カテゴリーのみを取得する(孫は取得しない)

目次

現在のカテゴリーの子カテゴリーのみを取得する(孫は取得しない)

現在のカテゴリーの子カテゴリーのみを取得したい場合は以下のように実装
get_the_categoryでなぜかそのカテゴリーが属するすべてのカテゴリーを取得してくるので、カテゴリーIDを特定するために、現在のカテゴリーと合致するIDを取得するためforでループしている

name){
	        $cat_id = $cat[$i]->cat_ID; //現在開いているカテゴリーとMatchするなら
	        break;
	    }else{
	        $cat_id = 0;
	    }
	}
	?>
	 $cat_id, //親を現在のカテゴリーとする子カテゴリーを取得
	    'show_counts' => true, //記事数表示
	  );
	my_category_list($args);
?>

function.php

function my_category_list($args = array()) {
  //デフォルト値(必要に応じて get_categories() の引数に対応するものを追加したり削除すればよい)
  $defaults = array(
    'parent' => '',  //出力する親カテゴリーの名前またはID(0 を指定すると最上位の全てのカテゴリーを読み込む)
    'include' => '',    //出力するカテゴリー名をカンマで区切って指定。
    'exclude' => '',    //除外するカテゴリー名をカンマで区切って指定。
    'hide_empty' => 0,    //記事(投稿)のないカテゴリーも読み込むかどうか(0:読み込む、1:読み込まない)
    'show_counts' => false,     //記事(投稿)の件数を表示するかどうか
    'show_children' => false,   //子カテゴリーを出力するかどうか
    'show_ancestor' => false,   //孫カテゴリー(以下)を出力するかどうか
    'orderby' => 'name',  //並べ替えのキー id, slug, name, count
    'order' => 'ASC',  //並べ替えの順序 'ASC'または'DESC'
    'image_html' => '',  //挿入する画像のHTML 例:''
  );
  $args = wp_parse_args( $args, $defaults );    //パラメータを解析し、省略されたパレメータにはデフォルト値をセット
  extract( $args, EXTR_SKIP );    //キーを変数名、値を変数の値として処理
  
  if(!is_numeric($parent)) {  //親カテゴリーはIDでも名前でも指定可能なため、数値以外はIDに変換
    $parent = get_cat_ID(trim($parent)); 
  }
  
  $include = explode(',', $include);
  $include_ids = '';    //インクルードするカテゴリーIDのリスト(カンマ区切りの文字列)
  $count = count($include);
  if($count) {
    for($i=0; $i < $count; $i++) {    //カテゴリー名からカテゴリーIDを取得
      $include_ids .= get_cat_ID(trim($include[$i]));    //カテゴリー名の前後に空白がある可能性があるので取り除く
      if($i != $count-1) {
        $include_ids .= ',';    //最後の要素以外はカンマで区切る
      }
    }
  }
  
  $exclude = explode(',', $exclude);
  $exclude_ids = '';    //除外するカテゴリーIDのリスト(カンマ区切りの文字列)
  $count = count($exclude);
  if($count) {
    for($i=0; $i < $count; $i++) {    //カテゴリー名からカテゴリーIDを取得
      $exclude_ids .= get_cat_ID(trim($exclude[$i]));    //カテゴリー名の前後に空白がある可能性があるので取り除く
      if($i != $count-1) {
        $exclude_ids .= ',';    //最後の要素以外はカンマで区切る
      }
    }
  }
  
  $cats = get_categories(array(  //以下のパラメータで指定したカテゴリーオブジェクトの配列を変数に代入
    'parent' => $parent,  //親カテゴリーのIDの指定
    'hide_empty' => $hide_empty,  //記事(投稿)のないカテゴリーも読み込むかどうか
    'include' => $include_ids,  //インクルードするカテゴリーIDのリスト
    'exclude' => $exclude_ids,  //除外するカテゴリーIDのリスト
    'orderby' => $orderby,  //並べ替えのキー
    'order' => $order  //並べ替えの順序
  ));
  
  if(count($cats)) {  //カテゴリーがある時だけ、以降の処理を行う
    echo "
    \n"; foreach($cats as $cat) { echo '
  • '; if($image_html != '') echo $image_html; //画像の指定があれば挿入 echo '' . $cat->name . ''; //カテゴリーのリンクと名前を出力 echo $show_counts ? ' (' . $cat->count . ")\n" : "\n"; //$show_countsが真の場合は件数を出力 if($show_children){ //現在処理中のカテゴリー名、挿入する画像、子孫カテゴリー出力の有無を渡して再起呼び出し my_category_list(array( 'parent' => $cat->name, 'image_html' => $image_html, 'show_children' => $show_ancestor )); } echo "
  • \n"; } echo "
\n"; } }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です