超高速WordPress実行環境 KUSANAGI稼働中
本サイト処理速度 0.000
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投稿のID1234
    posts不明
    w12
    catカテゴリーのterm_id1
    withcommentsコメントフィード関連1
    withoutcommentsコメントフィード関連0
    sサイト内検索の検索文字列WordPress
    search不明
    exact検索時完全一致にするかどうか1
    sentence検索文字列の分解を行うか1
    calendar不明
    pageページ分割時のページ送り数3
    pagedアーカイブページのページ送り数5
    moremoreの表示1
    tbトラックバック1
    pb不明
    author作成者のユーザーID2
    orderアーカイブの昇順・降順asc
    orderbyアーカイブの順列date
    year2013
    monthnum4
    day16
    hour20
    minute21
    second23
    name投稿スラッグ hello-world
    category_nameカテゴリースラッグuncategorized
    tagタグのterm_id4
    feedフィードの種類rss2
    author_name作成者名omagari
    static不明
    pagename固定ページのスラッグsample-page
    page_id固定ページのID2
    errorレスポンスコード?404
    comments_popupコメントポップアップ
    attachmentメディアのスラッグkoara
    attachment_idメディアのID11094
    subpostattachmentのエイリアス
    subpost_idattachment_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ページの表示を行います。

    ファイルの読み込み順序

    おすすめ記事
    ▶ WordPressで行うべきセキュリティ対策!
    ▶ WordPressが重い/表示速度を高速化する方法
    プライム・ストラテジー採用情報
    ▶ プライム・ストラテジーは人材を募集しております。

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

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

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

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