[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 "