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