このブログはWordPressというブログシステムで運用しています。テーマ(デザイン)を自作時に、固定ページのpage.phpを用意せずに投稿記事と同じsingle.phpを利用するよう設定しました。その方法を紹介します。
ゆめぴょんです。こんちはっ(^^)/
昨年12月からこのブログのテーマを制作してきて、まだ完成とはいかないけど先週公開することができました。スマホ版も年始に公開済みです。次の記事を参考にしてください。
企業サイトなどの場合は「会社情報」「株主へ」など固定ページを多用するため、テンプレートも独自に作成した方がいいでしょう。しかし個人ブログでは固定ページは「サイトマップ」「プロフィール」くらいしか使ってないと思います。
固定ページには標準では「page.php」というテンプレートファイルを使っています。通常はそれでいいと思います。しかし自分でテーマ制作した時には、可能なら「single.php」を共通活用したいと思いました。
固定ページでpage.phpでなくsingle.phpを使うメリット
ひとことで言うと「複数ファイル管理が面倒だから」ということになるのですが、もう少し分解して理由を抜き出してみました。
- 制作するべきファイルが単純計算で半分になる
- 保守するべきファイルが半分になる
- 機能追加・修正する時に固定ページだけ置き去りにならない
ちなみに私はテーマ制作の最終テストの段階では、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テーマを制作する人に役立てばうれしいです。
スマホ版デザインテーマを制作した時の、高速化の記事もぜひ参考にしてみてください。
ゆめぴょんでした。ちゃおっ!