(記事内リンクにPR含む場合があります)

【WordPress】固定ページでpage.phpでなく投稿記事のsingleを共通利用する方法

singleで遊ぶ子猫-コネコ WordPressテーマ作成

singleで遊ぶ子猫-コネコ

このブログはWordPressというブログシステムで運用しています。テーマ(デザイン)を自作時に、固定ページのpage.phpを用意せずに投稿記事と同じsingle.phpを利用するよう設定しました。その方法を紹介します。

ゆめぴょんです。こんちはっ(^^)/

昨年12月からこのブログのテーマを制作してきて、まだ完成とはいかないけど先週公開することができました。スマホ版も年始に公開済みです。次の記事を参考にしてください。

企業サイトなどの場合は「会社情報」「株主へ」など固定ページを多用するため、テンプレートも独自に作成した方がいいでしょう。しかし個人ブログでは固定ページは「サイトマップ」「プロフィール」くらいしか使ってないと思います。

固定ページには標準では「page.php」というテンプレートファイルを使っています。通常はそれでいいと思います。しかし自分でテーマ制作した時には、可能なら「single.php」を共通活用したいと思いました。

固定ページでpage.phpでなくsingle.phpを使うメリット

ひとことで言うと「複数ファイル管理が面倒だから」ということになるのですが、もう少し分解して理由を抜き出してみました。

  1. 制作するべきファイルが単純計算で半分になる
  2. 保守するべきファイルが半分になる
  3. 機能追加・修正する時に固定ページだけ置き去りにならない

ちなみに私はテーマ制作の最終テストの段階では、WordPressプラグイン「Theme Test Drive」を便利に活用しました。おすすめですよ。

テーマファイルの通常時の挙動

テンプレート(テーマファイル)は、ページの種類によって次のように優先順位が決められています。

  • ホーム:home.php > index.php
  • 投稿記事:single.php > index.php
  • 固定ページ:page.php > index.php
  • カテゴリ一覧:category.php > index.php
  • タグ一覧:tag.php > index.php
  • 年月日ページ:archive.php > index.php
  • 404エラー:404.php > index.php
  • 検索結果:search.php > index.php

上リストを見てもらえばわかるように、定められたテーマファイルがなければ、最終的には全てのテンプレートで「index.php」が利用されます。

固定ページも例外ではなく「page.php」が用意できてなければ「index.php」を使うことになります。

参考:テンプレート階層 – WordPress Codex 日本語版

しかし私は「index.php」を「ホーム」「カテゴリー」「タグ」「年月日」のページで利用していて、デザインも固定ページとは全く違うため別の方法を探しました。

固定ページで投稿記事の「single.php」を利用する方法

私のブログの「固定ページ」は「投稿記事」のデザインと共通でも違和感ないように作りました。他の方の個人ブログを見ても同じ傾向だと感じています。

だから「固定ページ」と「投稿記事」のテンプレートファイルを統合することにしました。「page.php」が存在すると優先されるため、サーバーのテーマフォルダから削除することを忘れずに。

「page.php」が存在しない状況で、テーマファイル「functions.php」に次の記述を書けば、固定ページでも「single.php」を読みに行きます。

[php]
function page_to_single( $template ) {
if ( $template == ” )
$template = locate_template( array( ‘single.php’ ) );
return $template;
}
add_filter( ‘page_template’, ‘page_to_single’ );
[/php]

「single.php」もなければ最終的には「index.php」を利用することになります。

ちなみにこのプログラムは、下のサイトを参考にさせていただきました。

参考:固定ページを投稿ページ用テンプレートファイル(single.php)で表示する:WordPress私的マニュアル

投稿記事だけや、固定ページだけに表示させる方法

「投稿記事」と「固定ページ」でテーマファイルを「single.php」に統合しても、それぞれでのみ表示したい内容はあると思います。

例えば私の場合は、カテゴリーに関する部分は投稿記事にだけ表示したいです。そもそも固定ページにはカテゴリー・タグを設定していません。

そんな時に便利な関数が、投稿記事だけ指定できる「is_single()」固定ページだけ指定できる「is_page()」です。

具体的には次のように使います。

[html]
<?php if( is_single() ) { ?>
<p>投稿記事にだけ表示したい内容を、ココに記述!</p>
<?php } ?>

<?php if( is_page() ) { ?>
<p>固定ページにだけ表示したい内容を、ココに記述!</p>
<?php } ?>
[/html]

この関数を使えば、カテゴリーへのリンクを投稿記事にのみ表示できます。ただしあまり多用すると表示速度が遅くなるので、その場合は固定ページ専用の「page.php」を設置することをおすすめします。

まとめ:今日のゆめぴょんの知恵

今回はちょっとマニアっくな内容だったかもしれません。ただネット上でもあまり見つからなかった方法(需要がないのかも(>_<))なので、これからWordPressテーマを制作する人に役立てばうれしいです。

スマホ版デザインテーマを制作した時の、高速化の記事もぜひ参考にしてみてください。


ゆめぴょんでした。ちゃおっ!

タイトルとURLをコピーしました