WordPress テーマの詳説:第四章

Dissection of a WordPress theme: Part 4」の和訳です。
え~、やっと終わりました。ホントは去年の内に終えるはずだったんだけど。トホホ。

「WordPress テーマの詳説」はこれが最後で、この章では主にコンテンツ部分とコメント部分について書かれています。バージョン1.5の時に書かれた物ですが、デフォルトテーマはバージョン2.0.xでもあまり変わっていないので十分参考になるかと思います。

第一章から第三章はこちら

このガイドは John Godley による「Dissection of a WordPress theme: Part 4」の翻訳で、著作権は John Godley が保持しています。このオリジナルページおよび/またはこの翻訳ページの複製には原著者による許可が必要です。- This guide is the translation of the guide UrbanGiraffe » Dissection of a WordPress theme: Part 4 by John Godley who is the owners of the copyright. Any reproduction of the original page and/or the translated page is allowed only with the permission of the author.

前回までの章ではWordPressテーマの各ブロックの作成に焦点を当ててきた。 基本的な構造、続いてヘッダとフッタを作成し、そしてナビゲーションパネルを終わらせた。 これらはどのブログにとっても重要ではあるが、一番の目的ではない。一番の目的はコンテンツだ。
この4番目で最後の章では、WordPressからコンテンツを引き出して画面上にアレンジするプロセスを詳しく調べる。 フロントページの複数の投稿から検索結果やアーカイブまで、こうしたコンテンツをグループ化する手段をいくつか提示する。
WordPressがどのように作業負担を配分しているのか、「ループ(Loop)」と呼ばれる全能の構成概念がその他すべてとどのように結びついているのかを調べていく。
このガイドの終わりまでには、完全に動作するテーマと、ここで示された基本的なデザインのテーマを拡張できるほどの十分なWordPressの経験と知識を得ることができるはずだ。

ループ

ループはWordPressの表側であり、コード階層の一番上に位置している。 その基本的な役割は投稿情報を取得することであり、それによってその投稿を簡単便利に表示することができる。
これが「ループ」と呼ばれるのは単に文字通りループだからで、別に隠された意味はない。このループによる各繰り返しによってWordPressは投稿情報を読み込み、特別なテンプレート機能を通じてその投稿情報にアクセスする。 Codexではその機能の詳細を解説している。
主要なループはindex.phpにあるが、テーマに含まれているいくつかのファイルの中にも見つけることができる。 index.phpの詳細は後ほど見ていくが、ループは次のようなとても短いPHPのコードに集約することができる:

while ( have_posts() ) : the_post();
endwhile;

そう、たったこれだけ。縁の下で働いているデータベースや複数のPHPファイルは、すべてこの2行の間に集約されている。これをさらに細かくしてみると、2つの WordPress関数の呼び出しがPHPのwhileステートメントに囲まれている。PHPはこの条件文が trueを返している間、このコロンとendwhileの間にあるどんなものでも実行する。
上記のコードでは最初のWordPress関数が条件文になっている:

have_posts ()

これは単純な関数の呼び出しで、表示する投稿記事があれば「true」を返し、なければ「false」を返す。
ではどうやってWordPressは表示する記事の有無を知るのか?これは表示しているページのURLから推測することができる。フロントページには表示する記事がいくつかあるだろう。一方シングルページの場合、表示する記事は一つだけだ。内容に関わらずループは基本的に同じで、表示する投稿記事が無くなったときにhave_postsがfalseを返すことによって WordPressは正しいときにループを停止する。 実行し、endwhileの後で再開する。

ループの2番目に不可欠な要素は:

the_post ()

これは関数で、WordPressに次の投稿記事のための情報を読み込ませて、その情報を使えるように準備させる。 the_post以降の各呼び出しによってWordPressは次々と投稿記事を私たちに与える。つまり基本的にこれは投稿記事へのポインターなのである。

例えば表示する投稿記事が10個あったとすると、have_postsは11回呼び出される – 最初の10回はtrueを返し、11回目にfalseを返す。 have_postsがtrueを返すたびにthe_postが呼び出されてその投稿に関する情報を取得する。

the_post以降とループ終了以前には何でも置くことができ、投稿の情報を表示するのに使われる。必要なだけ質素にも高度にもできる。

作業の委託

WordPress は投稿の集まりを表示する様々な方法を提供している。例えばトップページには最新の複数の投稿記事が含まれる。アーカイブのセクションでは、特定の期間にわたるより多くの投稿記事が表示される。検索のページでは検索条件にマッチした記事が表示される。

このすべてを巨大サイズの一つのコードで管理するのではなく、こうした作業は、分割されて特定の仕事を扱うたくさんの小さなハンドラーに委ねられる。 これらの各ハンドラーには上記と全く同じループが含まれているが、記事情報はそれぞれ違う方法で処理される。

このハンドラーは様々なファイルに散在している:

  • index.php – フロントページを表示
  • single.php – 単一の記事を表示
  • search.php – 検索結果を表示
  • archive.php – アーカイブを表示
  • page.php – WordPressの「ページ」を表示

この方法はとても柔軟だが問題が一つある – 重複だ。自分のブログ全体にわたるテーマ(外観)の一貫性を維持するには、各ファイルに同じものを作る必要がある。さいわいなことに、ほとんどの変更は様式的なものでCSSの変更が必要になるだけだろう。 基本的な構造の変更には多大な作業を要することがある。

前回までのガイドでは実際に基本的な構造を変更していることに留意してほしい。 これはつまり、各ファイルをアップデートする必要があるということであり、すべてを調査する本当の理由でもある。

「WordPress テーマの詳説:第四章」への5件のフィードバック

  1. 突然の書き込みすいません。
    実は、以下の点に関して教えていただければと思います。
    WordPressで、各投稿の「コメント」を見ると、「古いコメント」が一番最初に来て、「新しいコメント」が一番最後に来ます。
    これを逆にするには、comments.phpにある以下のものをどう修正すればいいのでしょうか。
    教えていただければ幸いです。

コメントは停止中です。