WordPress カテゴリーテンプレートで現在のカテゴリーと同じスラッグを持つ固定ページの本文を出力

カテゴリー情報の説明文にいろいろ詰め込みたい場合に、任意の固定ページの本文で情報を入力し、取得する方法。

  • カテゴリー説明文をテキストエディターに変更するとか、
  • カテゴリーフィールドを自作するとか、
  • カテゴリー 説明文でHTMLを使えるようにするプラグインとか

方法はいろいろありますが…
取り敢えず今回は、 特定のカテゴリーだけだし。
余分なものは足さないで、WordPress が持っている機能だけでなんとかしよう
という考えから。
固定ページを利用することにしました。

手順1 カテゴリーと同じスラッグの固定ページを作る

カテゴリーのスラッグが
○○○.com/archives/category/foo/web
(「foo」を親カテゴリーに持つ子カテゴリー「web」)だとしたら、
固定ページのパーマリンクを
○○○.com/bar/web
(「bar」を親ページに持つ子ページ「web」) に設定します。
「bar」の部分は何でも良いです。
で、
○○○.com/bar/web の本文にいろいろ入力。

手順2 category.php にソースを記述

category.php の表示したい場所に、下記のソースを記述します。

条件分岐しているので、該当する固定ページがなければ、何も表示されません。

また、特定のカテゴリーにのみ対応させる場合は、category-◯◯.php にソースを記述します。

<?php
$catid = get_query_var('cat');//現在のカテゴリーのIDを取得
$category = get_category($catid);//IDから現在のカテゴリーの情報を取得
$catname = $category->slug;//現在のカテゴリーのスラッグを取得
$page_data = get_page_by_path('bar/'.$catname );
//カテゴリースラッグと同じスラッグの固定ページの情報を取得
//親ページがある場合は親ページのスラッグを含める:今回の場合親ページが bar なので、bar を入力
$page_id = $page_data->ID;//取得した固定ページのIDを取得
$page = get_post($page_id, 'OBJECT' , 'raw');//ページIDから固定ぺーじのオブジェクトを取得
$page_include = apply_filters( 'the_content',$page->post_content);//ページの本文をフィルターフックで整形
?>
<?php if($page_data) :
	echo $page_include;//整形したコンテンツを出力
?>
<?php endif ;?>

以上です。

新規カテゴリーを作成した場合にも、カテゴリーと同じスラッグの固定ページを作成すれば、その固定ページの本文を読み込んでくれます。
その場合、固定ページは、
$page_data = get_page_by_path(‘bar/’.$catname );
で示した、 ‘bar/’.$catname と同じ階層に作成してください。

固定ページを利用する利点

  • 固定ページの本文で入力できるので、編集が簡単
  • もちろん画像も簡単に挿入が可能
  • 管理画面のカテゴリー一覧が見やすい
    (カテゴリー説明文にごちゃごちゃ表示されなくてスッキリ)
  • 新規カテゴリーを追加した場合でも、新たにカテゴリーテンプレートを追加することなく、カテゴリーページの生成が可能。
    ( 同じスラッグの固定ページを作成し、入力するだけで読み込める )

詳しく説明しますね。

通常、カテゴリーで入力できるのは、
・カテゴリー名
・スラッグ
・親カテゴリー
・説明
の4点のみ。
「説明」には、HTMLタグは使えないので、画像は入れられません。

カテゴリーで入力できる項目

固定ページで入力できれば、画像も簡単に挿入できるし、文字色や背景色など、装飾も可能です。
で、説明文にいろいろ文章を入れてしまうと、

カテゴリー情報の表示

こんな感じでカテゴリー情報に表示されます。
これは、 カテゴリー 説明文でHTMLを使えるようにするプラグイン を使っても同じ。
たくさん書けば書くほど、ダラダラと表示されてしまい、イメージタグを入力すれば、なお見難い。
固定ページを利用すれば、カテゴリー一覧もスッキリ!

更に。
新規カテゴリーを作成するたびに、どのページの情報を読み込むか、カテゴリー毎にテンプレートを作成する必要もありません。
テンプレートもスッキリ!

新規カテゴリーを作成した場合にも、カテゴリーと同じスラッグの固定ページを作成すれば、その固定ページの本文を読み込んでくれます。
その場合、固定ページは、
$page_data = get_page_by_path(‘bar/’.$catname );
で示した、 ‘bar/’.$catname と同じ階層に作成してください。

関連記事

©Oz-style