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

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:データを出力して表示

  1. カテゴリ名からカテゴリIDを取得
  2. カテゴリIDがあればカテゴリIDからデータを取得
  3. データからリストを作成
  4. リストをグループ単位でHTMLにする
  5. 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()の返り値を使って色々カスタマイズが可能です

nameカテゴリ名
slugカテゴリスラッグ名
cat_ID
カテゴリID
count記事数
category_count子カテゴリ数
category_descriptionカテゴリ説明分