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

2023-02-22WordPress カスタマイズ,WordPress

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

WordPressのカテゴリを親子構造にせずにグループ別けして表示や処理をする方法とサンプルコードを紹介しています。

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

親子構造にしてURL構造などで躓いた時や、サイドバーのカテゴリ表示の為に構造を変えるのもなーって時に一案として使えるかな、と思います。

カテゴリ・タグのカスタムフィールドを使った方法もありますが、今回は単純にサイドバーにぐるPHPの配列としてグループ別けして処理するやりかたになります。
動作としては、このブログのサイドバーで表示されているものと同じ感じになります。

この方法は以下の手順で実装します。

  1. ショートコードで実行できる関数を用意
  2. カテゴリーをグループ別けする
  3. データを出力して表示する
  4. カスタマイズする

ショートコードで実行できる関数を用意する

ショートコードで実行できる関数を用意しておきます。ウィジェットで使える様にしておくと、簡単にサイドバーなどに設置できます。

function categoryList()
{
	// この中に処理を書いていきます
}

// ショートコードと実行する関数を定義
add_shortcode('category_list', 'categoryList');

// ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');

カテゴリーをグループ別けする

phpで配列を利用してカテゴリをグループ別けします。
サンプルコードでは単純にジャンル別にカテゴリ名でグループ化しています。

数が多い場合などは、カテゴリのデータにカスタムフィールドを与えてグループ別けしておくか、表示には使わない親カテゴリを使うとかの方法があります。

function categoryList()
{
	$category_groups = [];
	$category_groups['WEB'] = array('PHP', 'CSS', 'JavaScript');
	$category_groups['ゲーム'] = array('Phaser', 'Unity', 'cocos2D');
	$category_groups['ライフ'] = array('料理', 'お菓子');
};

// ショートコードと実行する関数を定義
add_shortcode('category_list', 'categoryList');

// ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');

データを出力して表示する

  1. カテゴリ名からカテゴリIDを取得
  2. カテゴリIDがあればカテゴリIDからデータを取得
  3. データからリストを作成
  4. リストをグループ単位でHTMLにする
  5. HTML出力
function categoryList()
{

	$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', 'categoryList');

//ウィジェットでショートコードを有効化
add_filter('widget_text', 'do_shortcode');

カスタマイズする

get_category()関数の返り値に含まれるデータを使って色々カスタマイズが可能です。
get_category()関数の返り値には以下のデータが含まれています。

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