パラメーターの理解が基本中のキ
WordPress を理解する上で、最も重要なことは「与えられたパラメーターから条件に合致した記事情報を抽出して表示するアプリケーションである」という理解です。
http://www.example.com/index.php?p=nnnn
http://www.example.com/index.php?cat=n
インストール直後のパーマリンク設定がデフォルトになっている場合には、上記のようなパラメーターを伴ったURLとなります。この指定されたパラメーターによって表示される内容が変わります。当然と言えば当然のように思われがちですが、普段からパーマリンクの設定をカスタマイズしていると、意外とこの点の理解が不足がちです。
指定可能なパラメーターは 3.5 では、標準で下記の46種類が存在します。このほかにカスタム投稿タイプやカスタム分類の設定を行っている場合、register_post_type、register_taxonomy で指定した query_var が追加となります。
パラメーター名 | 役割 | 指定例 |
---|---|---|
m | 日時 | 201304 |
p | 投稿のID | 1234 |
posts | 不明 | |
w | 週 | 12 |
cat | カテゴリーのterm_id | 1 |
withcomments | コメントフィード関連 | 1 |
withoutcomments | コメントフィード関連 | 0 |
s | サイト内検索の検索文字列 | WordPress |
search | 不明 | |
exact | 検索時完全一致にするかどうか | 1 |
sentence | 検索文字列の分解を行うか | 1 |
calendar | 不明 | |
page | ページ分割時のページ送り数 | 3 |
paged | アーカイブページのページ送り数 | 5 |
more | moreの表示 | 1 |
tb | トラックバック | 1 |
pb | 不明 | |
author | 作成者のユーザーID | 2 |
order | アーカイブの昇順・降順 | asc |
orderby | アーカイブの順列 | date |
year | 年 | 2013 |
monthnum | 月 | 4 |
day | 日 | 16 |
hour | 時 | 20 |
minute | 分 | 21 |
second | 秒 | 23 |
name | 投稿スラッグ | hello-world |
category_name | カテゴリースラッグ | uncategorized |
tag | タグのterm_id | 4 |
feed | フィードの種類 | rss2 |
author_name | 作成者名 | omagari |
static | 不明 | |
pagename | 固定ページのスラッグ | sample-page |
page_id | 固定ページのID | 2 |
error | レスポンスコード? | 404 |
comments_popup | コメントポップアップ | |
attachment | メディアのスラッグ | koara |
attachment_id | メディアのID | 11094 |
subpost | attachmentのエイリアス | |
subpost_id | attachment_idのエイリアス | |
preview | プレビューかどうか | 1 |
robots | ロボットテキストかどうか | 1 |
taxonomy | 分類 | category |
term | 分類のスラッグ | uncategorized |
cpage | コメント分割時のページ送り数 | 4 |
post_type | 投稿タイプスラッグ | custom_post |
この標準で利用できるパラメーターは、wp-includes/class-wp.php の最初に記述されている、WP クラスのメンバー変数、$public_query_vars として定義されています。
var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type');
では、パーマリンクをデフォルト以外に設定していた場合は、どうなのでしょう?
URLからパラメーターへの変換 – リライトルール –
パーマリンクの設定をデフォルト以外にした場合、アクセスされたURLを元にしてパラメーターに変換を行っています。
例えば、このページ https://www.prime-strategy.co.jp/wp/2499/ は、内部的に、 https://www.prime-strategy.co.jp/index.php?p=2499 に変換されてから処理されています。
では、どうやってパラメーターへの変換を行っているのでしょうか?
WordPress は、デー タベース上に表示可能なURLのパターンとパラメーターへのマッピングデータを持っています。これをリライトルールと言います。
マッピングデータというからには、あのパターンはこの変換、このパターンはこの変換といったように、複数の変換ルールによって構成されています。例示するとインストール直後にパーマリンク設定を行った時点での変換ルールは68通りとなります。
わざわざデータベースにこのマッピングデータを保存するのは、WordPress のパーマリンク設定が何通りも設定可能となっており、この設定如何でリライトリールの内容も変わるため、ファイル上で変換ルールを管理することが煩雑となってしまうためです。
このため、WordPress は、パーマリンク設定を変更する際に、それに適したリライトルールの生成を行ってデータベースに保存しています。一種のキャッシュデータと考えても間違いではありません。
リライトルールの変換方法
リライトルールは、URLパターンの正規表現をキーとした連想配列で構成されています。
この連想配列をループ処理によって、順繰りに先頭からURLとの照合処理を行い、最初に合致した変換ルールを採用します。つまり、リライトルールの中に複数合致するものがあったとしても、より先にある変換ルールが採用されるというわけです。
たとえば、カテゴリーのURLと同じになる固定ページを作ったとしても、カテゴリーが表示されるのは、カテゴリーの変換ルールが先に記述され変換ルールとして採用されるためです。
採用された変換ルールの確認
想定したURLにアクセスしても、意図したとおりの表示にならなかった場合、まずは、この変換ルールが正しく行われているか確認しましょう。
確認するのには、Debug Bar と Debug Bar Extender を使うと、ブラウザ上から簡単に確認することができます。
想定したURLにアクセスして、Debug 表示のRequest メニューを見ると、リクエストされたURL(Request )、採用された変換ルール(Matched Rewrite Rule )と変換されたパラメーター(Matched Rewrite Query )が分かるようになっています。
図の場合は、archives/2593 というリクエストに対して、archives/([0-9]+)(/[0-9]+)?/?$ という変換ルールが合致し、p=2593&page= へと変換されたということになっています。
補足
リライトルールは、options テーブルに rewrite_rules という名前で保存されています。具体的な中身を見たければ、
<?php var_dump( get_option( 'rewrite_rules' ) ); ?>
で確認することができます。
まとめ
- WordPress は、46種のパラメーターで指定された条件に合った記事の表示を行うアプリケーション
- パーマリンクの設定を行っている場合は、リライトルールによってパラメーターへの変換がおこなわれている
- 表示がうまくいかない場合は、Debug Bar、Debug Bar Extender を使って変換内容を確認すべし
実行フローを理解する
WordPress の表示を区分するとしてて、全体を4フェイズに分けて考える
- 初期化
- 解析
- 抽出
- 表示
初期化
初期化フェイズは、WordPress の処理に必要な情報の読み込みや環境設定を行います。プラグインやテーマのfunctions.php の読み込みもこの段階で行われます。
解析
解析は、リクエストされたURLから WordPress として有効なパラメーターを拾い出す処理です。上述したリライトルールを用いた変換処理もこの時点でおこなわれます。
抽出
抽出処理は、有効とされたパラメータに応じたSQL文を組み立て、条件にあった記事の取得と、表示に必要な変数の設定、レスポンスヘッダーの発行を行っています。
表示
ここでようやくテンプレートファイルの処理となります。前フェイズで抽出した記事データを元にループ処理を用いてWebページの表示を行います。
ファイルの読み込み順序
[singlefooter_link]
コメントは受け付けていません。