この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2026-06-12 15:16:43

タイトル: Wordpressの一連の処理の流れ
SEOタイトル: WordPressの処理の流れ|リクエストからページ表示までの仕組み

WordPressは、ブラウザからのリクエストを受け取ると、初期化(コア・プラグイン・テーマの読み込み)→クエリ解析→テンプレート選択→投稿の出力(The Loop)→HTML生成・送信という一連の処理を順に実行してページを表示します。この記事では、リクエストが届いてから完成したHTMLが返るまでの内部処理の流れを、入口となるindex.phpからテンプレート出力までの順を追って解説します。

この記事の要点
  • WordPressのページ表示は、すべてのリクエストを単一の入口(index.php)で受ける「フロントコントローラ」型の仕組みで動作する。
  • 処理は大きく「初期化」「クエリ解析」「テンプレート選択」「出力」の4段階に分けられる。
  • どの投稿を表示するかはWP_QueryがURLを解析して決定し、どのテンプレートを使うかは「テンプレート階層」のルールで決まる。
  • 投稿内容はThe Loop(ループ)で1件ずつ取り出して出力される。
  • 各処理の要所にはフック(アクション/フィルター)が用意されており、プラグインやテーマはここに処理を差し込んで挙動を拡張する。
  • 仕組みを理解しておくと、プラグイン競合・表示崩れ・キャッシュ起因の不具合の原因を切り分けやすくなる。

全体像

WordPressは、テーマやプラグインによって表示されるページが大きく変わるため複雑に見えますが、内部の基本的な処理の流れは共通しています。一般的なテーマ(クラシックテーマ)構成での標準的な流れは、次の8段階としてとらえると理解しやすくなります。

  1. リクエスト受信:Webサーバーがリクエストを受け、index.phpへ処理を渡す。
  2. コアの読み込みwp-load.phpwp-config.phpを経由して設定とデータベース接続情報を読み込む。
  3. 初期化wp-settings.phpがコア機能・有効化されたプラグイン・テーマのfunctions.phpを読み込み、フックを登録する。
  4. クエリ解析:URLをリライトルールと照合し、WP_Queryが「どの投稿・ページを表示するか」を決定する。
  5. テンプレート選択:テンプレート階層のルールに従い、表示するページ種別に対応するテンプレートファイルを選ぶ。
  6. The Loop:選ばれたテンプレート内で、クエリ結果の投稿を1件ずつ取り出して出力する。
  7. フックによる拡張:各処理の要所でアクション・フィルターが実行され、プラグインやテーマが内容を加工・追加する。
  8. HTML生成・送信:組み上がったHTMLがブラウザへ返され、ページが表示される。

以降では、それぞれの段階を具体的なファイル名・関数名とともに見ていきます。

1. リクエスト受信から入口ファイルまで

WordPressは、すべてのフロント側リクエストを単一の入口で受け取る「フロントコントローラ」型の構成を採用しています。サーバー設定(Apacheでは.htaccess、Nginxではlocationディレクティブ)により、存在しないファイルへのアクセスはすべてサイトルートのindex.phpへ転送されます。

たとえばApacheの場合、.htaccessに記述されたリライトルールが、実ファイルとして存在しないURLをindex.phpへ振り向けます。index.php自体の処理は非常に短く、表示モードを定義したうえでwp-blog-header.phpを読み込むだけです。

// index.php(概念的な内容)
define( 'WP_USE_THEMES', true );
require __DIR__ . '/wp-blog-header.php';

wp-blog-header.phpは、コアを読み込むwp-load.phpを呼び出し、続いてメインクエリの実行(wp())とテンプレートの読み込み(template-loader.php)を順に行う、流れ全体の司令塔の役割を持ちます。

2. コアと設定の読み込み(wp-load / wp-config)

wp-load.phpは、サイトの設定ファイルであるwp-config.phpの場所を特定して読み込みます。wp-config.phpには、データベースの接続情報・認証用の秘密鍵・各種定数などサイト固有の設定が記述されています。

wp-config.phpは最後にwp-settings.phpを読み込みます。ここからがWordPress本体の初期化処理です。設定値や接続情報を読み込む段階であり、まだ「どのページを表示するか」は決まっていません。

3. WordPressの初期化(wp-settings.php)

wp-settings.phpは、WordPressの動作に必要な多数のコアファイルを読み込み、システム全体を組み立てる中核的な処理です。主に次のような処理が行われます。

  • コア関数群(load.phpdefault-constants.phpなど)の読み込み。
  • フック機構を提供するplugin.phpおよびWP_Hookクラスの読み込み。これによりadd_action()add_filter()などが利用可能になる。
  • データベース接続の確立。
  • 有効化されているプラグインの読み込み。各プラグインはこの段階でフックを登録する。
  • 有効なテーマのfunctions.phpの読み込み。テーマ独自の機能やフックの登録が行われる。
  • 初期化の節目でinitなどのアクションフックが実行される。

この段階を終えると、コア・プラグイン・テーマがすべて読み込まれ、フックが登録された状態になります。つまり、後続の処理に各拡張が介入できる準備が整います。

4. クエリ解析(リライトとWP_Query)

初期化後、wp-blog-header.phpwp()関数を呼び出してメインクエリを実行します。ここで行われるのは、URLを解析して「どのコンテンツを表示すべきか」を確定させる処理です。

  • リライト解析:リクエストされたURL(パーマリンク)を、登録済みのリライトルールと照合し、内部的なクエリ変数(例:投稿名・カテゴリー・ページ番号など)に変換する。
  • クエリ変数の確定:変換結果から、トップページ・個別投稿・固定ページ・アーカイブ・検索結果といった「ページの種別」を判定する。
  • WP_Queryの実行:確定したクエリ変数をもとにデータベースへ問い合わせ、表示対象となる投稿群を取得する。この結果が「メインクエリ」となる。

この処理によって、is_single()is_page()is_home()is_archive()などの条件分岐タグが正しい値を返すようになり、現在表示しているページの種別がテーマ側から判定できるようになります。

5. テンプレート選択(テンプレート階層)

メインクエリでページ種別が確定すると、template-loader.phpが、その種別に最も適したテンプレートファイルをテーマから選びます。この選択ルールがテンプレート階層(Template Hierarchy)です。WordPressは、種別ごとに「専用の名前のテンプレート」から「汎用的なテンプレート」へと、優先順位の高い順に存在を確認し、最初に見つかったものを使用します。最終的にどのページ種別でも、フォールバック先としてindex.php(テーマ内のテンプレート)が用いられます。

代表的なページ種別と、探索されるテンプレートの例は次のとおりです(左ほど優先度が高く、なければ右へフォールバックします)。

ページ種別 優先度の高いテンプレート例 最終フォールバック
個別投稿single-{投稿タイプ}.phpsingle.phpsingular.phpindex.php
固定ページpage-{スラッグ}.phppage-{ID}.phppage.phpindex.php
カテゴリーアーカイブcategory-{スラッグ}.phpcategory.phparchive.phpindex.php
トップページ(投稿一覧)home.phpindex.php
検索結果search.phpindex.php
404(未検出)404.phpindex.php

選ばれたテンプレートは多くの場合、get_header()でヘッダー(header.php)、get_sidebar()でサイドバー、get_footer()でフッター(footer.php)を読み込み、これらを組み合わせて1ページを構成します。なお、ブロックテーマ(フルサイト編集/FSE)の場合は、PHPテンプレートの代わりにHTML形式のブロックテンプレートが用いられるなど、テンプレートの解決方法が異なります。

6. The Loop(投稿の出力)

テンプレート内で投稿内容を出力する仕組みがThe Loop(ループ)です。メインクエリが取得した投稿を1件ずつ取り出し、タイトルや本文などを表示します。ループの基本形は次のようになります。

<?php if ( have_posts() ) : ?>
  <?php while ( have_posts() ) : the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <div><?php the_content(); ?></div>
  <?php endwhile; ?>
<?php else : ?>
  <p>投稿が見つかりませんでした。</p>
<?php endif; ?>

  • have_posts():未処理の投稿が残っているかを判定する。
  • the_post():次の投稿を「現在の投稿」としてセットし、the_title()などのテンプレートタグが現在の投稿を参照できるようにする。
  • the_content():投稿本文を出力する。この内部でも後述のフィルターが適用される。

7. フック機構(アクションとフィルター)

WordPressの拡張性を支える中核がフックです。コアは処理の要所に「差し込み口」を用意しており、プラグインやテーマはそこへ自分の処理を登録します。フックには2種類あります。

  • アクション(Action):特定のタイミングで「処理を実行する」ためのフック。add_action()で関数を登録し、コア側のdo_action()で実行される。例:initwp_headwp_footerなど。
  • フィルター(Filter):データを受け取り「加工して返す」ためのフック。add_filter()で関数を登録し、コア側のapply_filters()で値が渡される。例:本文を加工するthe_content、タイトルを加工するthe_titleなど。

登録時に指定する優先度(priority)の数値が小さいほど先に実行され、同じ優先度なら登録順に実行されます。たとえばthe_contentフィルターには、コアやプラグインが段落の自動整形・ショートコード展開・埋め込み変換などを登録しており、これらが順に適用された結果が最終的な本文として出力されます。このフック機構があるため、コア本体を改変せずに表示内容や挙動を拡張できます。

8. HTML生成・送信

テンプレートとThe Loop、そして各フックでの加工をすべて経て、完成したHTMLが組み上がります。最終的にこのHTMLがHTTPレスポンスとしてブラウザへ送信され、ページが表示されます。ヘッダーのwp_head()wp_headアクション)やフッターのwp_footer()wp_footerアクション)の位置で、プラグインが必要なCSSやJavaScriptの読み込みタグを出力するのも、この一連の流れの一部です。

つまずきやすいポイント

注意点 内容と対処の考え方
プラグイン競合複数のプラグインが同じフックや出力に介入し、互いの処理を打ち消したり想定外の順序で動いたりすることがある。原因切り分けでは、プラグインを一時的に無効化して問題が再現するかを確認すると特定しやすい。
フックの優先度同じフックに複数の処理が登録されると、優先度の数値順に実行される。期待した結果にならない場合、他の処理に後から上書きされている可能性があるため、優先度の指定を見直す。
メインクエリの改変表示件数や対象を変えたい場合、テンプレート内で新たにクエリを作るよりも、pre_get_postsなどのフックでメインクエリ自体を調整するほうが、条件分岐やページネーションとの整合性を保ちやすい。
キャッシュキャッシュ系プラグインやサーバー・CDNのキャッシュが有効な場合、ここまでの処理の結果が保存され、次回以降は処理を経ずに保存済みHTMLが返ることがある。変更が反映されないときは、各層のキャッシュをクリアして確認する。

よくある質問(FAQ)

Q. すべてのアクセスがindex.phpを通るなら、サイトごとにファイルを分けなくてよいのですか。
A. はい。WordPressは単一の入口ですべてのリクエストを受け、URLの解析結果に応じて表示するページを動的に切り替える設計です。どのページを表示するかは、URLをWP_Queryが解析して決定するため、URLごとに個別のPHPファイルを用意する必要はありません。

Q. 表示中のページに対応するテンプレートファイルがテーマに無い場合はどうなりますか。
A. テンプレート階層のルールに従い、より汎用的なテンプレートへ順にフォールバックします。専用テンプレートが見つからない場合でも、最終的にはテーマのindex.phpが使われるため、ページが表示できなくなることはありません。

Q. アクションフックとフィルターフックは、どう使い分ければよいですか。
A. 「特定のタイミングで何か処理を実行したい」場合はアクション、「渡されたデータを加工して返したい」場合はフィルターを使います。たとえばフッターにタグを追加するならアクション(wp_footer)、投稿本文の内容を書き換えるならフィルター(the_content)が適しています。

以上が、WordPressがリクエストを受け取ってからページを表示するまでの一連の処理の流れです。「初期化 → クエリ解析 → テンプレート選択 → 出力」という骨格と、各所に差し込まれるフックの役割を押さえておくと、テーマやプラグインの動作を理解し、不具合の原因を切り分ける際の手がかりになります。