テンプレートファイルの役割やら構成なんかについてのまとめ。そこそこ初心者向け。
WordPressテーマ概要
WordPressのデザインはテーマと呼ばれてます。テーマを構成するファイル群がテンプレートファイルです。
他のブログのようにテーマをテンプレートと呼んでも通じるけど、検索するときはテーマ(Theme)を使う方が良いかも。
ダウンロードしたばかりだと”Classic” と “Default”の2つがプリインストールされてますが、
テーマ新しく追加する場合は、ダウンロードして解凍したテーマのフォルダをWordpressのwp-content/themes/にアップロードするだけ。
デザイン(表示)に並ぶテーマのスクリーンショットをクリックすれば即座に変更されます。
テーマ変更で再構築が必要ない、というのがWordpressの良いところ。
WordPressは1.x系、2.0.x系、2.1.x系、2.2以降と2.5以上では内部仕様が違ってるので、テーマやプラグインはバージョンにあったものを選ばないとエラーが出たりするので注意。
特に2.7は最新とあって対応してるテーマやプラグインもまだ少ないようです。
公式のリスト»
WordPress 2.7 Theme Compatibility List
WordPress 2.7 Plugin Compatibility List
ver2.5→ver2.7に修正
WordPressはコアファイル・プラグイン等全てPHPなので、PHPとmySQLに通じていればかなり色々なことができます。
テーマを構成するテンプレートファイルは、XHTMLとPHPのテンプレートタグで作成されてます。
XHTMLとUTF-8で記述するのがベターですが、HTMLでも文字コードさえ合ってれば問題はないです。
文字コードはWordpress2.5ではUTF-8のみになりました。
テキストエディタはBOM無しのUTF-8で保存できるものを選ぶ必要があります。(メモ帳はダメ!絶対)
テンプレートに記述するWordpress独自のPHPコードはテンプレートタグの他、ループやファンクションなどかなり色々使えます。
PHPの関数や変数なんかも使えます。
特別なファイル
テンプレートファイル群の中に特別重要なものが2つあります。style.cssとfunctions.phpです。
style.cssにはただのphpファイルの集まりに過ぎないフォルダを、Wordpressにテーマと認識させる重要なコメントが入ります。
functions.phpはテーマで使う関数や初期設定、ウィジェットなどのソースコードが入ります。(無くても動きます)
style.cssを開くと、冒頭にコメントが入ってます。
このコメントがないとテーマと認識されません。
/* Theme Name: テーマの名前 Theme URI: テーマのホームページURI Description: テーマの概要 Author: 作者の名前 Author URI: 作者のサイト Template: テンプレートファイルを使用するテーマの名前 Version: バージョン Tags:タグ . General comments/License Statement if any. ライセンスとか . */
プラグインやページテンプレートでもそうですが、この冒頭のコメントで判断するのでコレを忘れると認識されません。
Templateはオプションで、ここに他のテーマの名前を入れるとその名前を書いたテーマのテンプレートファイル(index.php等)にスタイルシートだけ適用させることが出来ます。
functions.phpは名前の通りテーマで使う関数を入れるファイルです。
オリジナルのサイドバーウィジェットや、オプション設定などもここに記述できます。
このファイルを使えるようになってくるとカスタマイズが楽しくなること請け合い。
テンプレートファイルリスト
見てる人と表示に使われるテンプレートファイルの関係はこの画像が分かりやすいです。
Template Hierarchy»Visual Overview(新しいタブで開くした方がいいかも)
基本テンプレート一覧
- style.css(必須)
- テーマのメインとなるスタイルシートファイル。上で書いたコメントが必要。@importで他のCSSを読み込む事が出来ます
- index.php
- メインテンプレート。カテゴリやページ、シングルページにそれぞれテンプレートファイルがある場合はそちらが優先して使用されます。最低これとcomments.phpがあれば動く。
- comments.php
- コメントエリア表示用テンプレート。コメントフォームとコメントのリスト表示を担当します。Defaultのテンプレートを流用するのがベター。
- comments-popup.php
- ポップアップのコメントエリア表示用テンプレート。Defaultのテンプレートを流用するのがベター。
headにcomments_popup_script();、ループ内にcomments_popup_link();があると表示される。
テーマ内にテンプレートが見つからない場合は、Deafaultのテンプレートが使用される。 - home.php
- ホームページ用のテンプレート。固定ページに設定しない場合にこのテンプレートファイルがあると、トップだけこのテンプレートが使われます。
- single.php
- 投稿記事用テンプレート。時事系列に沿わないページには適用されない。
- page.php
- ページ用テンプレート。ページは1ページずつ独自のテンプレートを設定することも出来ますが、それが設定されてない場合に使用される。
- paged.php
- archive.phpやsearch.phpで2ページ目以降がある場合に使われる。category.php・date.php・author.phpがある場合はそちらが優先されるので使用されない。
- category.php
- カテゴリー用テンプレート。カテゴリー一覧を表示する際に使用される。
- author.php
- 投稿者用テンプレート。投稿者情報を表示する際に使用される。
- date.php
- 日時クエリで表示する際に使用されるテンプレート。アーカイブと似てる
- archive.php
- アーカイブ表示用テンプレート。表示優先順位はcategory.php、author.php、date.phpより下。
- search.php
- 検索結果用テンプレート。無い場合はindex.phpが使われる。
- 404.php
- 404 Not Found用のテンプレート。無い場合はindex.php。
- image.php
- 画像表示用テンプレート。[gallary]の画像ファイル単体表示(v2.5~)
- attachment.php
- 画像表示用テンプレート。「ページにリンク」を選択した時の画像表示用
- tag.php
- タグ用テンプレート。タグのアーカイブ表示
パーツテンプレート
呼び出しタグが用意されているパーツテンプレートは次の通り。
- header.php(
get_header();
) - ヘッダ出力用のテンプレート。
- footer.php(
get_footer();
) - フッター出力用のテンプレート。
- sidebar.php(
get_sidebar();
) - サイドバー出力用のテンプレート
関数がなくてもincludeなどで取得して表示することが出来ます。
たとえば検索フォームだけのテンプレートを作ったら▼
<?php include (TEMPLATEPATH . '/searchform.php'); ?>
searchform.phpには検索フォームのソースだけ記述すればおk。
Dreamweaverのライブラリみたいな感じです。
Page Templates
ページには、各ページごとにそれぞれ独自のテンプレートを使うことが出来ます。
作成方法は、任意の名前.phpでファイルを作成して、冒頭に次のコメントを入れるだけ。
<?php /* Template Name: Snarfer */ ?>
ページ作成の際にテンプレートを選ぶオプションが増えるので、そこから使うテンプレートを選べば適用されます。
Category Templates
カテゴリーを表示するテンプレートはいくつかあります。優先順位は次の通り。
- category-6.php
- category.php
- archive.php
- index.php
category-6.phpのように英数をつけたテンプレートを作ると、英数と同じIDのカテゴリーを表示するときだけ使用されます。
Author Templates
投稿者ページを表示するには、まず次のリンクをループ内に記述します。
<p>投稿者: <?php the_author_posts_link(); ?></p>
投稿者のリストも表示出来ます
<h2>List of authors:</h2> <ul> <?php wp_list_authors(); ?> </ul>
表示の優先順位
- author.php
- archive.php
- index.php
投稿者情報の設定
▼このソースを書いて
<?php if(isset($_GET['author_name'])) : $curauth = get_userdatabylogin($author_name); // NOTE: 2.0 bug requires get_userdatabylogin(get_the_author_login()); else : $curauth = get_userdata(intval($author)); endif; ?>
失敗するならこちらで▼
<?php global $wp_query; $curauth = $wp_query->get_queried_object(); ?>
▼こう書くと
<p>作者情報:<?php echo $curauth->nickname; ?></p>
作者情報:admin という感じで出力されます。
使えるものは次の通り。出力される値はプロフィールで設定したものです。
- $curauth->aim; » 連絡先のAIM
- $curauth->description; » 経歴
- $curauth->display_name; » ブログ上の表示名
- $curauth->first_name; » 名前
- $curauth->ID; » ID
- $curauth->jabber; » Jabber / Google Talk
- $curauth->last_name; » 姓
- $curauth->nickname; » ニックネーム
- $curauth->user_email; » E-mail
- $curauth->user_login; » ログイン名
- $curauth->user_nicename; » ユーザ名
- $curauth->user_registered; » 登録日
- $curauth->user_url; » URL
- $curauth->yim; » Yahoo IM
サンプルソース(ほんのり日本仕様)
<?php get_header(); ?> <div id="content" class="narrowcolumn"> <!-- This sets the $curauth variable --> <?php if(isset($_GET['author_name'])) : $curauth = get_userdatabylogin($author_name); else : $curauth = get_userdata(intval($author)); endif; ?> <h2><?php echo $curauth->nickname; ?>について</h2> <dl> <dt>ウェブサイト</dt> <dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd> <dt>プロフィール</dt> <dd><?php echo $curauth->user_description; ?></dd> </dl> <h2><?php echo $curauth->nickname; ?>の記事:</h2> <ul> <!-- The Loop --> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li><?php the_category('&');?> » <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>"> <?php the_title(); ?></a> (<?php the_time('Y/m/j'); ?>) </li> <?php endwhile; else: ?> <p><?php _e('投稿はまだありません'); ?></p> <?php endif; ?> <!-- End Loop --> </ul> </div> <?php get_sidebar(); ?> <?php get_footer(); ?>
<参考>
「[WP]テンプレートファイルの仕様と構成」への4件のフィードバック