超高速WordPress実行環境 KUSANAGI稼働中
本サイト処理速度
language

    WordPress の表示ロジックを理解する – Reloaded –

    WordPress

    パラメーターの理解が基本中のキ

    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 に変換されてから処理されています。

    url-mapping

    では、どうやってパラメーターへの変換を行っているのでしょうか?
    WordPress は、デー タベース上に表示可能なURLのパターンとパラメーターへのマッピングデータを持っています。これをリライトルールと言います。
    マッピングデータというからには、あのパターンはこの変換、このパターンはこの変換といったように、複数の変換ルールによって構成されています。例示するとインストール直後にパーマリンク設定を行った時点での変換ルールは68通りとなります。

    わざわざデータベースにこのマッピングデータを保存するのは、WordPress のパーマリンク設定が何通りも設定可能となっており、この設定如何でリライトリールの内容も変わるため、ファイル上で変換ルールを管理することが煩雑となってしまうためです。

    このため、WordPress は、パーマリンク設定を変更する際に、それに適したリライトルールの生成を行ってデータベースに保存しています。一種のキャッシュデータと考えても間違いではありません。

    リライトルールの変換方法

    リライトルールは、URLパターンの正規表現をキーとした連想配列で構成されています。
    この連想配列をループ処理によって、順繰りに先頭からURLとの照合処理を行い、最初に合致した変換ルールを採用します。つまり、リライトルールの中に複数合致するものがあったとしても、より先にある変換ルールが採用されるというわけです。
    たとえば、カテゴリーのURLと同じになる固定ページを作ったとしても、カテゴリーが表示されるのは、カテゴリーの変換ルールが先に記述され変換ルールとして採用されるためです。

    採用された変換ルールの確認

    想定したURLにアクセスしても、意図したとおりの表示にならなかった場合、まずは、この変換ルールが正しく行われているか確認しましょう。
    確認するのには、Debug BarDebug Bar Extender を使うと、ブラウザ上から簡単に確認することができます。

    想定したURLにアクセスして、Debug 表示のRequest メニューを見ると、リクエストされたURL(Request )、採用された変換ルール(Matched Rewrite Rule )と変換されたパラメーター(Matched Rewrite Query )が分かるようになっています。

    debug-request

    図の場合は、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フェイズに分けて考える

    phase

    1. 初期化
    2. 解析
    3. 抽出
    4. 表示

    初期化

    phase1

    初期化フェイズは、WordPress の処理に必要な情報の読み込みや環境設定を行います。プラグインやテーマのfunctions.php の読み込みもこの段階で行われます。

     解析

    phase2

    解析は、リクエストされたURLから WordPress として有効なパラメーターを拾い出す処理です。上述したリライトルールを用いた変換処理もこの時点でおこなわれます。

    抽出

    phase3

    抽出処理は、有効とされたパラメータに応じたSQL文を組み立て、条件にあった記事の取得と、表示に必要な変数の設定、レスポンスヘッダーの発行を行っています。

    表示

    phase4

     ここでようやくテンプレートファイルの処理となります。前フェイズで抽出した記事データを元にループ処理を用いてWebページの表示を行います。

    ファイルの読み込み順序

    Webサイトのお悩み解決!個別相談会

    WordPress等CMSで構築されたサイトを運用中(もしくはご予定)で、様々な課題をお抱えの企業Webサイトご担当者様、「技術的にはよくわからないけれどマーケティング的にも改善をしたい」等とお考えのマーケティングご担当者様、「お客様のためにWebサイトについて聞きたい」「クラウドを導入したい」等お考えのWeb制作会社様などを対象に「【法人向け】Webサイトのお悩み解決!個別相談会」を開催しています。

    お客様の課題を解決するソリューション、
    条件に沿ったベネフィットあるご提案を提供いたします。

    ご相談・お問い合わせフォーム