ホーム > 投稿記事 > WordPressのカテゴリー一覧にカスタム投稿のものも追加する方法

WordPressのカテゴリー一覧にカスタム投稿のものも追加する方法

投稿日 : 2017年11月26日   更新日 : 2019年10月04日
カテゴリー : WordPress
WordPressのカテゴリー一覧にカスタム投稿のものも追加する方法の画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして6年~の経験があります。WordPressは2年~の経験があります。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

あなたのWordPressサイトでは、カスタム投稿を使っていますか?

実は、WordPress管理画面のWidgetから使えるカテゴリ一覧は、通常の投稿しか対応できません。

サイドバーのカテゴリー表示イメージ

よくあるカテゴリ一覧、赤枠内のことです。

CustomPostUIなどでカスタム投稿を追加している場合は、独自に作成しなければなりません。

ここでは記述するファイルは出力したいところのファイルです。使用しているテーマ内ファイルを修正します。アップグレードの影響が少ない、子テーマ内が理想です。
私はサイドバーに出したかったので、sidebar.phpに記述しました。

カテゴリ取得の考え方(階層無制限)

子カテゴリまで、と決め打ちにすれば楽なのですが、そこはプログラム組むんだから、いくらでも階層深くてOKにしたいところ。

そうなると、再帰処理が必要です。結構複雑になります。文字に起こすと中々に伝わりにくいのですが…。

  1. 親カテゴリを取得
  2. 親カテゴリがある場合、指定の親カテゴリの子カテゴリ以下を探しに行く
  3. 子カテゴリを取得
  4. その下の子カテゴリがあるか確認(再帰、3に戻る)
  5. 子カテゴリがない場合はそこで探索終了
  6. 子カテゴリがあったら格納

子カテゴリ以下を取得するソース

ソースで書くと以下のようになります。再帰処理を行うことで、親以下すべてのカテゴリを取得できます。孫だろうとひ孫だろうとOKです。

// カテゴリ一覧
	// 親カテゴリを取得
	$catAry = array();
	// 親カテゴリを取得
	$args = array(
		'type' => 'post',
		'parent' => 0,
		'taxonomy' => 'category',
		'pad_counts' => true
	);
	$catAry = get_categories($args);

	// 親カテゴリがある場合、子カテゴリ以下を探しに行く
	if(!empty($catAry)) {
		foreach($catAry as $key=>$pCat) {
			$childAry = getCats($pCat->cat_ID);
			$catAry[$key]->child = $childAry;
		}
	}

	/**
	 * 子カテゴリ以下を取得
	 * $id 指定の親カテゴリID これを元に子カテゴリを取得する
	 * $catAry 取得した子カテゴリ配列
	 * return 子カテゴリ以下のオブジェクト配列(WPで取得したものはオブジェクト配列で返ってくる)
	 */
	function getCats($id, $catAry=array()) {
		// 子カテゴリを取得
		$args = array(
				'type' => 'post',
				'parent' => $id,
				'taxonomy' => 'category',
				'pad_counts' => true
		);
		$cats = get_categories($args);
		if(!empty($cats)) {
			// 指定の親カテゴリ以下の子カテゴリを取得
			foreach($cats as $cat) {
				// 更に子カテゴリを探しに行く
				$ary[$cat->cat_ID] = $cat;
				$child = getCats($cat->cat_ID, $ary);

				$catAry = $ary;
				if(!empty($child)) {
					$catAry[$cat->cat_ID]->child = $child;
				}
			}
		} else {
			return;
		}
		return $catAry;
	}

出力側の処理の考え方(階層無制限)

こちらも子以下まで自動で出力するので、再帰処理が必要です。

でも子カテゴリ以下を取得するソースができていれば、楽ですよ。

  1. カテゴリがある場合のみ、表示する
  2. 所属親のカテゴリポストタイプを取得(自分で設定する)…ここでは技術情報のポストタイプは「program_info」としています。
  3. URLを生成…通常のカテゴリアーカイブにポストタイプのパラメータを追加します。
  4. 出力したいようにソースを設定する(ここではTwentyseventeenのカテゴリウィジェットをベースにしています)
  5. 子カテゴリ以下が存在する場合は表示処理(再帰)
  6. HTMLソースの後処理(タグを閉じるとか)

まとめ

  • カスタム投稿を扱う上で、カテゴリー一覧を表示したい場合は標準機能以外にカスタマイズが必要
  • 再帰処理はプログラムを書く上で使えたらとても便利なもの
  • 慣れないうちはデバッグをかけながら練習してみる

再帰処理は複雑なものですが、使えるととても便利なものです。

WordPressでカスタム投稿を使う場合は、「通常の機能に追加して動くようにする」ことも多くあります。

そのような現場に出くわしたときは、是非、この考え方を参考にしてください。

楽しい物造りを

NaoLight

自分のブログやサイトを、楽しく作ってもらえたら。

プログラムを使って望み通りに、拡張しやすく、自分の思うように。

できたときに、すごく楽しい!と思ったら。

控えめに言って、「最高です」。

NaoLight -NAOT-(なおらいと、なおと、と呼んでください)はそんな思いをカタチにする、WordPressのテーマです。

ご購入はこちらからお願いします(BOOTHへ移動します)。

Nao Light-NAOT-公式サイト



この記事にコメントする

入力エリアすべてが必須項目です。承認制のため、表示までに時間がかかる場合があります。

CAPTCHA


内容を確認の上、コメントをお願いします。