今回は、カテゴリーページページをカスタマイズします。

 

対象サイト:http://bousai.hitsuji.me

適用テーマ:https://github.com/hitsujixgit/wp_bousai.git

 

特定のカテゴリーページに固定ページを挿入する

カテゴリーページは、基本的に「あるカテゴリーに属した記事」をリストアップしたページとして生成されます。でもカテゴリーページに、そのカテゴリーの説明文とか入れたい場合もありますよね・・・。

 

こんな感じ。

カスタマイズ済みカテゴリーページ_2x

この記事では、特定のカテゴリー(情報を得る)のカテゴリーページの冒頭に、文章&画像を挿入する手順を紹介します。挿入文は固定ページとして作成し、後で容易に編集できるようにしておきます。

 

 

固定ページを1つ作成して、挿入文を編集する

挿入文を編集するための固定ページを1つ新規作成します。通常の要領で文章&画像を編集します。通常と異なるのは下記2点です。

  • slugは半角英数字で指定する(この記事を挿入時の動作安定のため)
  • 公開状態を「非公開」に指定する

固定ページを編集する_2x

 

ここではslugを”category-information-acquisition”と指定しました。この値は後ほど使います。

 

 

専用のカテゴリーページをつくる

ここでは文章を挿入する対象カテゴリーを絞ってカスタマイズします。

category-{slug}.phpを作成する

ダッシュボード>投稿>カテゴリーを開き、文章を挿入するカテゴリーのslugを調べます。そこで調べたslugを元に、category-{slug}.phpを新規作成して、テンプレートフォルダに入れます。

 

このような名前にすれば、このslugに該当するカテゴリーページが作成されるときのみ、category-{slug}.phpがテンプレートとして呼び出されます。

補足:よく分からないという方は、テンプレート階層の仕組みを見てください^^

 

この記事でのTargetである「情報を得る」のslugは、”information-acquisition”なので、

category-information-acquisition.php

の名前でファイルを新規作成します。

 

 

category-{slug}.phpを編集する

まずは、archive.phpの全ソースコードをcategory-{slug}.phpにコピペします。コピーする理由は、カスタマイズ前のカテゴリーページと同じ構成をcategory-{slug}.phpで再現することです。

 

補足:もしもあなたのテンプレートにcategory.phpが存在すれば、そちらをコピーしてくださいね。この記事のテーマwp_bousaiの場合はcategory.phpが無いので、1つ下の階層のテンプレートarchive.phpをコピーしています。

 

 

タイトルを出力するコードの直後に、先ほど作成した固定ページの文面を挿入する処理を追加します。

category-information-acquisition.php

 

L.19-23が、固定ページを挿入するコードです。get_page_by_path()は、引数で指定したslugと一致する固定ページのオブジェクトを入手するWordPress関数です。引数には、先ほど作成した固定ページのslugを指定します。

 

念のためL.21で、固定ページの有無を判定して、指定した固定ページの入手に成功していた場合は、

echo '<div class="post-content">'.apply_filters('the_content', $cat_discription_page->post_content).'</div><hr />';

の1行で、本文を出力します。

 

the_content()関数で出力した場合と同じ出力にするために、apply_filters(‘the_content’)をかけてからecho出力する構成になっています。参考:Codex

 

以上で、編集は終わりです。実際にカテゴリーページを表示して、動作を確認してみてください。

 

 

トップページにも同様の方法を適応できる!

この記事ではカテゴリーページに、非公開指定した固定ページを挿入しました。この考え方は、他のテンプレートにも適用できます。つまり

  • 挿入文を書いた固定ページを非表示で作成。
  • ↑を挿入したいテンプレートにget_page_by_path()〜echoの処理を書く

 

便利なのがトップページ。最新記事も固定ページも両方表示したい!という場合に、home.phpの途中にget_page_by_path()〜echoの処理を書けばOKです。

 

 

 

「実践的テーマの作成」の記事