[WP]テンプレートファイルの仕様と構成

テンプレートファイルの役割やら構成なんかについてのまとめ。そこそこ初心者向け。

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.phpauthor.phpdate.phpより下。
search.php
検索結果用テンプレート。無い場合はindex.phpが使われる。
404.php
404 Not Found用のテンプレート。無い場合はindex.php
image.php
画像表示用テンプレート。[gallary]の画像ファイル単体表示(v2.5~)
attachment.php
画像表示用テンプレート。「ページにリンク」を選択した時の画像表示用
tag.php
タグ用テンプレート。タグのアーカイブ表示

パーツテンプレート
呼び出しタグが用意されているパーツテンプレートは次の通り。

header.phpget_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

カテゴリーを表示するテンプレートはいくつかあります。優先順位は次の通り。

  1. category-6.php
  2. category.php
  3. archive.php
  4. 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>

表示の優先順位

  1. author.php
  2. archive.php
  3. index.php

投稿者情報の設定

▼このソースを書いて

<?php 
if(isset($_GET&#91;'author_name'&#93;)) :
$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&#91;'author_name'&#93;)) :
$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('&');?> &raquo; <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(); ?>

<参考>

1件のコメント

Leave a Comment.