テンプレートファイル
「テーマ(Theme)」は「スタイルシート(style.css)」と「関数ファイル(functions.php)」と「テンプレートファイル」で構成されますが、「関数ファイル(functions.php)」は必要に応じて、追加するものなので、ウィジェット対応、追加機能などの、追加関数がない場合は必要がありません。
それに対して、「テンプレートファイル」はWebサイトを構成する各ページの記述のため、用途別のテンプレートが必要な場合は、その数のテンプレートファイルが必要になります。
「テンプレートファイル」は閲覧者がWebサイトを表示する際に、ソースファイルとして、Webサイトの表示、生成をおこないます。また、テンプレートの共通部分を「パーツテンプレート」ファイルとして持つことができます。
「テーマ(Theme)」は、Webサイトの各ページ表示を個別のテンプレートとして定義できるようになっていますが、Webサイトを機能させるために、全ての「テンプレートファイル」を必要とはしません。
また、「テンプレートファイル」は階層を持っていて、必要なファイルだけで構成することができます。例えば、「スタイルシート」のstyle.cssと「テンプレートファイル」のindex.phpで構成される「WordPress テーマ」も存在します。
基本的な「テンプレートファイル」は下記のとおりです。
- 1.index.php :メインテンプレート
- 2.home.php :TOPページ用テンプレート →メインテンプレートで代用可
- 3.single.php :記事用テンプレート
- 4.page.php :固定ページ用テンプレート
- 5.category.php :カテゴリ用テンプレート →アーカイブ用テンプレートで代用可
- 6.author.php :著者用テンプレート →アーカイブ用テンプレートで代用可
- 7.date.php :日時用テンプレート →アーカイブ用テンプレートで代用可
- 8.archive.php :アーカイブ用テンプレート →属性を共有して、属性別に表示切り替え
- 9.archives.php :アーカイブタイトル一覧用テンプレート
- 10.search.php :検索結果用テンプレート
- 11.404.php :404 Not Found用テンプレート
また、「テンプレートファイル」の「パーツテンプレート(共通部品となるテンプレートファイル)」は下記のとおりです。
- 11.header.php :header記述用テンプレート
- 12.sidebar.php :sidebar記述用テンプレート
- 13.footer.php :footer記述用テンプレート
- 14.comments.php :コメント用テンプレート
- 15.comments-popup.php :ポップアップコメント用テンプレート
共通部品となるファイルはget_sidebar()やget_footer()のようなテンプレートタグを使用を使用して各「テンプレートファイル」にインクルードします。
その他に「スタイルシート(style.css)」と「関数ファイル(functions.php)」等も必要になります。
- 16.style.css :スタイルシート
- 17.functions.php :関数ファイル
- 18.screenshot.png :テーマ表示用画像ファイル
- 19.readme.txt :テーマ説明ファイル
2009.04.12 16;22
テンプレートファイルの階層
テンプレートファイルの階層は下図のとうりです。階層は左から右へ「もし、このテンプレートがない場合は~」と推移していきます。図を見ると、「index.php」が全てのテンプレートに応用が利き、「archives.php」や「attachment.php」、「single.php」も他のテンプレートの代用になることが分かります。
| 種類 | テンプレートファイルの階層 | |||
|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |
| メイン(TOP) | home.php | - | - | index.php |
| 検索結果 | search.php | - | - | |
| 404エラー | 404.php | - | - | |
| PAGE | pagename.php | page.php | - | |
| アーカイブ | - | - | archive.php | |
| カテゴリー | category-id.php | category.php | ||
| 日付 | date.php | - | ||
| ユーザー | author.php | - | ||
| タグ | tag・slug.php | tag.php | ||
| 記事 | - | - | single.php | |
| その他 | image.php | attachment.php | ||
| video.php | ||||
| audio.php | ||||
| application.php | ||||
style.cssとindex.phpだけで「テーマ」ができるのも「テンプレートファイルの階層」構造をWordPressが持っているからです。多様なデザインテーマや機能的なテーマを制作できることとは別に、非常にシンプルなテーマも制作できるようになっています。
2009.04.12 18;58
テンプレートタグ
WordPressテーマの「スタイルシート(style.css)」も、「テンプレートファイル(index.php、page.php他)」も、基本的には他のWebサイトと同様に、XHTMLに従って、コーディングされていますが、WordPressが実装する「機能」を使用する場合には「テンプレートタグ」が必要になります。
言い換えれば、「テンプレートタグ」を使うことによって、ブログに「投稿」した文章を「Webサイトに表示」し、「並び替え」、「リンクを張り」、「カテゴリーにまとめ」、「フィードデータを作成・配信する」ことができます。
「テンプレートタグ」はWordPressの本体で定義されたPHP関数で、WordPressに対して、「どんな働きをするか」を指示しています。したがって、表示形式はPHPのコードそのもので、「<?php ~ ?>」という形で記述したり、関数形式のタグを利用したりします。
「テンプレートタグ」はWordPressの開発が進むたびに増え、改良されて、いまや、100を超えるものになっていますが、基本的なタグを習得することで、誰もが簡単に利用できるようになっています。もちろん、PHP経験者はより深く、活用することが可能です。
ところで、「テンプレートタグ」や「関数」ではパラメータを利用して、出力(表示)に関する細かな設定をすることができます。
例えば、パラメータを変更することで、日付順に並んだ投稿記事が、昇順になったり、降順になったりします。パラメータを複数設定することで、いろいろな条件での表示、処理が可能です。
(パラメータには「ファンクション形式」と「クエリ形式」があり、記述ルールが異なるので、注意が必要です。)
2009.04.12 20;07
Default/index.php
「メインテンプレート(index.php)」はテンプレートファイルの基本になります。テンプレートファイルの階層としては最も汎用性のある階層のファイルです。
「ページテンプレート(page.php)」や「シングルテンプレート(single.php)」などのテンプレートファイルがテーマ内にない場合、「メインテンプレート(index.php)」が代行して、その役割を果たします。また、「TOPページ用テンプレート(home.php)」がテーマ内にない場合、Webサイトのトップページの役割も果たします。
*「Default_Theme(英語版)」の「メインテンプレート(index.php)」をコメント文(//説明文)を使って機能解説してみましょう。
Default_Theme/index.php
<?php
/**
* @package WordPress
* @subpackage Default_Theme
*/
get_header(); ?> //インクルードファイル:header.phpを読み込みます
<div id="content" class="narrowcolumn">
<?php if (have_posts()) : ?> //コンテンツデータを取得する・ループのPHPコードの開始
<?php while (have_posts()) : the_post(); ?>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
//投稿(コンテンツ)タイトル名の表示
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
//投稿日付、投稿者の表示
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
//投稿(コンテンツ)内容の表示
<div class="entry">
<?php the_content('Read the rest of this entry »'); ?>
</div>
//投稿タグ・カテゴリー・編集リンク・コメントの表示
<p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p>
</div>
<?php endwhile; ?>
//投稿前後のナビゲーションの表示
<div class="navigation">
<div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div>
</div>
<?php else : ?> //コンテンツデータがないときのメッセージ表示
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php get_search_form(); ?>
<?php endif; ?> //コンテンツデータを取得する・ループのPHPコードの終了
</div>
<?php get_sidebar(); ?> //インクルードファイル:sideber.phpを読み込みます
<?php get_footer(); ?> //インクルードファイル:footer.phpを読み込みます
- 1.ヘッダー(header)部分、サイドバー(sidebar)部分、フッター(footer)部分は共通部品として、それぞれのインクルードファイルが読み込まれています。
- 2.コンテンツデータを取得するループのPHPコードによって、DBからコンテンツデータを取得して、タイトルと内容を表示しています。
- 3.コンテンツデータに関する投稿日付、投稿者、タグ、カテゴリー等を表示しています。
- 4.仮にコンテンツデータがないときには「Sorry, but you are looking for something that isn’t here.」を表示します。
2009.04.13 02;23
Default/single.php
「記事用テンプレート(single.php)」は投稿記事のみの表示となります。テンプレートファイルの階層としては最も汎用性のある階層の「メインテンプレート(index.php)」に次いで、汎用性の高いファイルです。
「イメージテンプレート(image.php)」や「ビデオテンプレート(video.php)」などのテンプレートファイルがテーマ内にない場合、「記事用テンプレート(single.php)」が代行して、その役割を果たします。
基本的には「メインテンプレート(index.php)」の構成に似ていますが、記事に対する「コメント」欄の追加や「トラックバック」の表示などが追加されています。
*「Default_Theme(英語版)」の「単体記事用テンプレート(single.php)」をコメント文(//説明文)を使って機能解説してみましょう。
Default_Theme/single.php
<?php
/**
* @package WordPress
* @subpackage Default_Theme
*/
get_header();?> //インクルードファイル:header.phpを読み込みます
<div id="content" class="widecolumn">
//コンテンツデータを取得する・ループのPHPコードの開始
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//投稿前後のナビゲーションの表示
<div class="navigation">
<div class="alignleft"><?php previous_post_link('&laquo; %link') ?></div>
<div class="alignright"><?php next_post_link('%link &raquo;') ?></div>
</div>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
//投稿(コンテンツ)タイトル名の表示
<h2><?php the_title(); ?></h2>
<div class="entry">
//投稿(コンテンツ)内容の表示
<?php the_content('<p class="serif">Read the rest of this entry &raquo;</p>'); ?>
//記事分割の際のリンク表示
<?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
//投稿(コンテンツ)に付けられた「タグ」の表示
<?php the_tags( '<p>Tags: ', ', ', '</p>'); ?>
//投稿(コンテンツ)の履歴記録(日付、カテゴリー、RSS)メッセージの表示
<p class="postmetadata alt">
<small>
This entry was posted
<?php /* This is commented, because it requires a little adjusting sometimes.
You'll need to download this plugin, and follow the instructions:
http://binarybonsai.com/archives/2004/08/17/time-since-plugin/ */
/* $entry_datetime = abs(strtotime($post->post_date) - (60*120)); echo time_since($entry_datetime); echo ' ago'; */ ?>
on <?php the_time('l, F jS, Y') ?> at <?php the_time() ?>
and is filed under <?php the_category(', ') ?>.
You can follow any responses to this entry through the <?php post_comments_feed_link('RSS 2.0'); ?> feed.
//コメント、トラックバック/ピンバックに関するメッセージの表示
<?php if (('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
// Both Comments and Pings are open ?>
You can <a href="#respond">leave a response</a>, or <a href="<?php trackback_url(); ?>" rel="trackback">trackback</a> from your own site.
<?php } elseif (!('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
// Only Pings are Open ?>
Responses are currently closed, but you can <a href="<?php trackback_url(); ?> " rel="trackback">trackback</a> from your own site.
<?php } elseif (('open' == $post-> comment_status) && !('open' == $post->ping_status)) {
// Comments are open, Pings are not ?>
You can skip to the end and leave a response. Pinging is currently not allowed.
<?php } elseif (!('open' == $post-> comment_status) && !('open' == $post->ping_status)) {
// Neither Comments, nor Pings are open ?>
Both comments and pings are currently closed.
<?php } edit_post_link('Edit this entry','','.'); ?>
</small>
</p>
</div>
</div>
<?php comments_template(); ?> //インクルードファイル:comment.phpを読み込みます
<?php endwhile; else: ?> //コンテンツデータがないときのメッセージ表示
<p>Sorry, no posts matched your criteria.</p>
<?php endif; ?> //コンテンツデータを取得する・ループのPHPコードの終了
</div>
<?php get_footer(); ?> //インクルードファイル:footer.phpを読み込みます
- 1.ヘッダー(header)部分、サイドバー(sidebar)部分、フッター(footer)部分は共通部品として、それぞれのインクルードファイルが読み込まれています。
- 2.コンテンツデータを取得するループのPHPコードによって、DBからコンテンツデータを取得して、タイトルと内容を表示しています。
- 3.投稿(コンテンツ)の履歴記録(日付、カテゴリー、RSS)メッセージを表示しています。
- 4.コンテンツデータに関する投稿日付、投稿者、タグ、カテゴリー等を表示しています。
- 5.コメント、トラックバック/ピンバックに関するメッセージを表示しています。
- 6.仮にコンテンツデータがないときには「Sorry, no posts matched your criteria.」を表示します。
2009.04.14 03;13
Default/page.php
「ページ用テンプレート(page.php)」は「時系列」や「カテゴリー」「タグ」などの属性で分類される「投稿」記事とは異なり、「固定ページ」を表示する際に利用されるテンプレートファイルです。
例えば、一般サイトでは「最新NEWS」は「投稿」記事と同じように「時系列」や「カテゴリー」「タグ」別に分類され、活用されますが、「会社情報」や「お問合せ」のようなページには属性に関係なく、「固定ページ」である方が便利です。言い換えれば、「固定ページ」が必要な場合には「ページ用テンプレート(page.php)」が活用されます。
「ページ用テンプレート(page.php)」は「カテゴリー」や「タグ」で分類できないので、「ページ」を使い分ける必要ができた場合は「固有名のページ用テンプレート(example_page.php)」を作成する必要があります。
例えば、「会社情報」などの”一般情報掲載用のテンプレート”と「製品情報」などの”コンテンツ用のテンプレート”を分け、コンテンツ管理をする場合です。その場合、サイトの内容によって、作成画面から、「固有名のページ用テンプレート(example_page.php):exampleは固有名称」を切り替えて作成することが可能です。
*「Default_Theme(英語版)」の「ページ用テンプレート(page.php)」をコメント文(//説明文)を使って機能解説してみましょう。
Default_Theme/page.php
<?php
/**
* @package WordPress
* @subpackage Default_Theme
*/
get_header(); ?> //インクルードファイル:header.phpを読み込みます
<div id="content" class="narrowcolumn">
//コンテンツデータを取得する・ループのPHPコードの開始
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
//コンテンツ・タイトル名の表示
<h2><?php the_title(); ?></h2>
<div class="entry">
//コンテンツ内容の表示
<?php the_content('<p class="serif">Read the rest of this page &raquo;</p>'); ?>
//記事分割の際のリンク表示
<?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
</div>
</div>
//コンテンツデータを取得する・ループのPHPコードの終了
<?php endwhile; endif; ?>
//記事編集の際のリンク表示
<?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
</div>
<?php get_sidebar(); ?> //インクルードファイル:sideber.phpを読み込みます
<?php get_footer(); ?> //インクルードファイル:footer.phpを読み込みます
- 1.ヘッダー(header)部分、サイドバー(sidebar)部分、フッター(footer)部分は共通部品として、それぞれのインクルードファイルが読み込まれています。
- 2.コンテンツデータを取得するループのPHPコードによって、DBからコンテンツデータを取得して、タイトルと内容を表示しています。
2009.04.14 03;14

