ホーム > 投稿記事 > WordPressのカスタム投稿記事のカテゴリーリンクの設定方法

WordPressのカスタム投稿記事のカテゴリーリンクの設定方法

投稿日 : 2018年01月27日   更新日 : 2019年10月04日
カテゴリー : WordPress
WordPressのカスタム投稿記事のカテゴリーリンクの設定方法の画像

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

カスタム投稿のカテゴリ一覧の実装(階層無制限)の件に引き続き、カスタム投稿記事とアーカイブのカテゴリーの表示と、そのリンク先を正しく設定しました。

記事の下に、その記事で設定されているカテゴリ表示のところです。

カテゴリー表示位置
カテゴリーリンクを押下した先のアーカイブページのカテゴリ表示

赤枠内が該当します。

wp_list_categoriesではできない

wp_list_categoriesだと、カスタム投稿の場合リンクが正しく表示されなくなります。

見た目のカテゴリは正しいけど、リンクするとリンク切れ…404になってしまいます。

実装方法

こんな感じになります。

$category = get_the_category(取得する記事のID);
if($category) {
	$catStrAry = array();
	foreach($category as $cat) {
		$parent = $cat->category_parent;
		$slugAry = array();
		$slug = '/';
		// 親がいた場合は親の情報を取得しに行く
		while($parent != 0) {
			$parentCat = get_category($parent);
			$slugAry[] = $parentCat->slug;
			// 親カテゴリ情報を更新
			$parent = $parentCat->category_parent;
		}
		if(!empty($slugAry)) {
			$slug .= implode('/', $slugAry) . '/';
		}
		$url = ホームページの基本URL. '/category' . $slug . $cat->slug . '/?post_type=' . $postType;
		$catStrAry[] = $url .':' . $cat->cat_name;
	}
	$string = implode(" / ", $catStrAry);
}
  1. 表示する記事のカテゴリを取得
  2. カテゴリが存在する場合、親カテゴリを確認
  3. 親カテゴリがある場合、親の情報を取得してスラッグを配列で保存
  4. 取得した親カテゴリの更に親のカテゴリ情報を更新する
  5. 親カテゴリがある場合(0でない場合は取得したカテゴリの更に親のカテゴリがある)、3へ戻る
  6. 親カテゴリのスラッグ配列がある場合、「/」区切りで繋げる
  7. 最終的なカテゴリURLにする(最後尾にpost-typeパラメータを追加)

実装に回り道した理由

実装方法がちょっと回りくどい感じがしたのに気づいた方はいるでしょうか。

なぜこんなことをしているのかというと、記事カテゴリに子カテゴリを含んでいる場合、

「/category/子スラッグ/?post_type=ポストタイプ名」

にすると、子スラッグ部分がカテゴリの親と解釈されてリンク切れになるためです。

正しく解釈させるには

「/category/親スラッグ/子スラッグ/?post_type=ポストタイプ名」

とする必要があります。

このURLを作るために、親カテゴリを取得する必要があります。

get_the_categoryはそのカテゴリの情報はありますが、自身の親のカテゴリ情報はIDを持っているだけです。そのため、そのIDからスラッグを取得してくる必要が出てきます。

まとめ

  • カスタム投稿を使っている場合、カテゴリーのリンク先などに配慮する必要がある。
  • 特にデフォルト機能ではそのまま対応できないので要注意

カスタム投稿を使うときは、自動表示で出てくるであろう箇所のリンクが切れていないか確認することが肝要です。サイトの質、制作者の質を問われているような気がします。

楽しい物造りを

NaoLight

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

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

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

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

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

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

Nao Light-NAOT-公式サイト



この記事にコメントする

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

CAPTCHA


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