WordPressで親子構造を使わずにカテゴリをグループ別け表示する方法

WordPressのカテゴリを親子構造にせずにグループ別けして表示や処理をする方法です。
親子構造にしてURL構造などで躓いた時や、サイドバーのカテゴリ表示の為に構造を変えるのもなーって時に一案として使えるかな、と思います。
カテゴリ・タグのカスタムフィールドを使った方法もありますが、今回は単純にサイドバーにぐるPHPの配列としてグループ別けして処理するやりかたになります。
動作としては、このブログのサイドバーで表示されているものと同じ感じになります。
1:ショートコードで実行できる関数を用意
ショートコードで実行できる関数を用意しておきます。ウィジェットで使える様にしておくと、簡単にサイドバーなどに設置できます。
functions.php
function category_list_function(){
//この中に処理を書いていきます
}
add_shortcode('category_list', 'category_list_function');
//ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');
2:カテゴリーをグループ別け
phpで配列を利用してカテゴリをグループ別けします。サンプルでは単純にジャンル別にカテゴリ名でグループ化しています。
数が多い場合などは、カテゴリのデータにカスタムフィールドを与えてグループ別けしておくか、表示には使わない親カテゴリを使うとかの方法があります。
functions.php
function category_list_function(){
$category_groups = [];
$category_group['WEB'] = array('PHP','CSS',','JavaScript');
$category_group['ゲーム'] = array('Phaser','Unity','cocos2D');
$category_group['ライフ'] = array('料理','お菓子');
}
add_shortcode('category_list', 'category_list_function');
//ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');
3:データを出力して表示
- カテゴリ名からカテゴリIDを取得
- カテゴリIDがあればカテゴリIDからデータを取得
- データからリストを作成
- リストをグループ単位でHTMLにする
- HTML出力
functions.php
function category_list_function(){
$category_groups = [];
$category_groups['WEB'] = array('PHP','CSS',','JavaScript');
$category_groups['ゲーム'] = array('Phaser','Unity','cocos2D');
$category_groups['ライフ'] = array('料理','お菓子');
foreach ($category_groups as $key => $group) {
$li = '';
foreach ($group as $value) {
//カテゴリ名からカテゴリIDを取得
$cat_id = get_cat_ID($value);
if(isset($cat_id)){
$cat = get_category($cat_id);
$li = $li.'<li class="cat-item"><a href="https://1-notes.com/category/'.$cat->slug.'/">'.$value.'('.$cat->count.')</a></li>';
}
}
$ul = $ul.'<p class="categorie-group">'.$key.'</p><ul>'.$li.'</ul>';
}
echo '<div class="widget widget_categories">'.$ul.'</div>';
}
add_shortcode('category_list', 'category_list_function');
//ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');
get_category()の返り値
get_category()の返り値を使って色々カスタマイズが可能です。get_category()の返り値には以下のデータが含まれています。
name | カテゴリ名 |
slug | カテゴリスラッグ名 |
cat_ID | カテゴリID |
count | 記事数 |
category_count | 子カテゴリ数 |
category_description | カテゴリ説明分 |
ディスカッション
コメント一覧
まだ、コメントがありません