WordPressが舞台裏でどのように動いているかを理解することは、とても興味深いことです。ほとんどのユーザーにとっては、URLを入力すればページがすぐに読み込まれるという単純なものに見えます。しかし、実際にはバックグラウンドで多くのことが起こっているのです。
数年前にWordPressを使い始めたとき、私たちはWordPressがどのように機能するのかを徹底的に調べました。そして今、私たちはWordPressについてもっと理解していただけるよう、その知識を簡単なキーワードで皆さんと分かち合うためにここにいます。
このガイドでは、WordPressの内部構造について説明します。また、わかりやすいインフォグラフィックもご用意しました。
WordPressとは?
WordPressはサイトビルダーであり、コンテンツ管理システムです。オープンソースのソフトウェアで、誰でもどんなサイトでも作ることができる。
2003年にブログ・プラットフォームとしてスタートしたが、すぐにCMSへと変貌を遂げ、後に本格的なウェブサイト構築プラットフォームとなった。現在では、インターネット上のすべてのサイトの43%以上を支えている。
WordPressの進化、歴史、長所と短所についてさらに詳しく知りたい方は、 WordPressとは何か、WordPressサイトを構築するのにいくらかかるかについての包括的なガイドをご覧ください。
なぜWordPressの仕組みを学ぶべきなのか?
WordPressはオープンソースのソフトウェアであり、誰でもそのコードを研究し、アプリ(プラグイン)やテンプレート(テーマ)を書くことができる。
長年にわたり、WordPressがソフトウェアとしてどのように機能するかを学ぶだけで、数え切れないほどの初心者がすぐに上級ユーザーになるのを見てきました。
また、WordPressのパフォーマンスを向上させ、プロジェクトでより良いコードを書く方法についても学ぶことができます。
このガイドでは、すべてのプロセスをステップ・バイ・ステップで説明します。ユーザーがページをリクエストした時点から開始し、そのページが完全に読み込まれた時点で終了します。
準備はいいかい?始めよう
詳しくは下記のチュートリアルをご覧ください。
1.wp-config.phpファイルを読み込む
wp-config.phpはWordPressの設定ファイルです。WordPressサイトのグローバル変数を設定し、WordPressデータベース情報を含みます。明らかな理由から、WordPressが最初に読み込むファイルです。
wp-config.phpファイルとその編集方法についてさらに詳しく。
2.初期定数の設定
wp-config.phpファイルを読み込んだ後、WordPressは初期定数の設定に移ります。
これには、WordPressのデフォルトのアップロード場所、最大ファイルサイズ、wp-config.phpファイルで設定されたその他の初期定数などの情報が含まれます。
3.advanced-cache.phpファイルをロードする。
あなたのサイトにadvanced-cache.phpファイルが存在する場合、WordPressは次にそれを読み込みます。
このファイルはドロップインファイルとして機能し、いくつかの人気のあるプラグイン、特にWordPressのキャッシュプラグインで使用されます。あなたのサイトがこのファイルを使用している場合、プラグイン画面に「ドロップイン」という新しい項目が表示されます。
4.wp-content/db.phpファイルをロードする。
WordPressでは、開発者が独自のデータベース抽象化レイヤーを作成し、wp-contentフォルダ内に配置されたdb.phpファイルに読み込むことができます。WordPressのキャッシュプラグインは、データベースのパフォーマンスを向上させるために一般的にこれを使用します。
あなたのサイトにこのファイルがあれば、WordPressはそれを読み込みます。
5.MySQL に接続し、データベースを選択します。
WordPressは次に進むのに十分な情報を得た。MySQL サーバーに接続し、データベースを選択します。
WordPressがデータベースに接続できない場合、「Error establishing database connection」というエラーが表示され、WordPressはここで終了します。
すべてがうまくいけば、次のステップに進む。
6.object-cache.phpまたはwp-includes/cache.phpファイルをロードする。
WordPressはobject-cache.phpファイルを探します。存在しない場合は、WordPressはwp-includes/cache.phpファイルの読み込みに移ります。
7.wp-content/sunrise.phpファイルをロードする。
マルチサイトネットワークの場合、WordPressはwp-contentフォルダにsunrise.phpファイルがあればそれを探します。
8.ローカライゼーション・ライブラリのロード
WordPressは、wp-includesフォルダー内のl10n.phpライブラリを読み込みます。このファイルはWordPressのローカリゼーションシステムをロードし、翻訳をロードし、ロケールを設定します。
WordPressを他の言語で使用する方法については、こちらのガイドをご覧ください。
9.マルチサイトプラグインのロード
マルチサイトネットワークの場合、WordPressはマルチサイトプラグインを読み込みます。WordPressのマルチサイトネットワークでプラグインがどのように機能するかについては、さらに詳しくご覧ください。
10.アクション ‘muplugins_loaded’ を実行する。
muplugins_loadedアクションがWordPressによって実行されるようになりました。このアクションはWordPressマルチサイト上のネットワーク有効化したプラグインにのみ利用可能です。
11.有効化したプラグインを読み込む
WordPressは、サイト上の有効化したプラグインをすべて読み込みます。これは、WordPressデータベースのオプションテーブルのactive_pluginsエントリーを検索することによって行われます。これにより、WordPressはサイトにインストールされているが有効化していないプラグインを無視する権限がありません。
12.pluggable.phpファイルを読み込む
pluggable.phpファイルには、WordPressプラグインで再定義できる関数が含まれています。
WordPressは、他のプラグインがすでにこのファイル内で関数を定義しているかどうかを確認します。そうでない場合は、プラグイン自身が関数を定義します。
13.アクション ‘plugins_loaded’ を実行する
WordPressは’plugins_loaded’アクションを実行します。
これにより開発者は、有効化したプラグインがすべてロードされた後に実行されるように関数をフックすることができる。
14.書き換えルールのロード
WordPressはリライトルールを読み込みます。これらのリライトルールは、WordPressがSEOフレンドリーなURLを使用するのに役立ちます。
15.wp_query、$wp_rewrite、$wpをインスタンス化する。
この時点で、WordPressは以下のオブジェクトをロードする:
wp_query:WP_Queryクラスを保持するグローバルインスタンス。WordPressの典型的なクエリーフォーマットで要求されるコンテンツをWordPressに伝えます。
wp_rewrite:WP_Rewriteクラスを保持するグローバルインスタンス。リライトルールと関数が含まれており、要求されたコンテンツを表示するためにどのURLを使うかをWordPressに伝えます。
wp:WPクラスのグローバルインスタンスには、リクエストを解析してメインクエリーを実行する関数が含まれます。
16.アクション ‘setup_theme’ を実行する
WordPressは「setup_theme」アクションの実行に移ります。このアクションはWordPressテーマがロードされる前に実行されます。
17.子テーマのfunctions.phpファイルをロードする。
functions.phpファイルはプラグインとして機能し、WordPressテーマでサイトにテーマ固有の機能を追加するために使用されます。子テーマを使用している場合、WordPressは子テーマのfunctions.phpファイルを読み込みます。
そうでない場合は、現在有効化したテーマのfunctions.phpファイルを読み込みます。
18.親テーマのfunctions.phpファイルをロードする。
子テーマを使用している場合、WordPressは親テーマのfunctions.phpファイルを読み込みます。
19.アクション ‘after_setup_theme’ を実行する。
このアクションはWordPressがテーマを設定し、テーマ機能をロードした後に実行されます。テーマが利用できる最初のアクションです。
20.現在のユーザーオブジェクトの設定
この時点でWordPressは現在のユーザーオブジェクトを読み込みます。これにより、WordPressはユーザーの権限グループと能力に従ってリクエストを管理することができます。
21.アクション「init」を実行する
WordPressはここまでで、必要な重要情報をすべて読み込んだ。次に、’init’アクションを実行します。このアクションは、コアで利用可能なブロックや、そのサイトにインストールされているプラグインによって提供されるブロックも登録します。
このアクションにより、開発者はWordPressが前述の情報をすべて読み込んだ後に実行する必要のあるコードを追加することが有効化されます。
22.アクション ‘widget_init’ を実行する。
widget_init
アクションにより、開発者はこの時点でウィジェットを登録し、必要なコードを実行することができます。
23.wp()の実行
WordPressは、wp-includes/functions.php
ファイルにあるwp()
関数を呼び出します。これはWordPressのクエリーグローバル$wp、$wp_query、$wp_the_queryを設定し、$wp->mainを呼び出します。
24.リクエストの解析
これでWordPressはユーザーリクエストを解析するのに必要な情報をすべて手に入れた。ユーザーのリクエストに一致するリライトルールをチェックすることから始めます。
そして、クエリー変数フィルターを実行し、アクションフックをリクエストし、ヘッダーリクエストを送信する。
25.クエリーの実行
クエリーに一致するコンテンツがない場合、WordPressはis_404変数を設定する。
そうでなければ、WordPressはクエリー変数を読み込む。
そして、WP_Query->get_posts()を実行します。
次に、WP_QueryオブジェクトでDO_ACTION_REF_ARRAY ‘pre_get_posts’ アクションを実行します。
WordPressはここでapply_filtersを実行してクエリーをクリーンアップし、いくつかの最終チェックを実行する。
さて、データベースから投稿をフェッチし、posts_resultsとthe_postsフィルターを適用する。
クエリー部分はWordPressが投稿を返すことで終わる。
26.アクション「template_redirect」を実行する
WordPressはtemplate_redirect
アクションを実行します。このフックはWordPressがどのテンプレートページをロードするかを決定する直前に実行されます。
27.フィードテンプレートのロード
リクエストされたコンテンツがRSSフィードの場合、WordPressはフィードテンプレートを読み込みます。
28.ロードテンプレート
WordPressはテンプレート階層に基づいてテンプレートファイルを探します。そして、通常WordPressのループを含むテンプレートを読み込みます。
29.アクション「シャットダウン」を行う
すべてのPHPの実行を終了する直前に、WordPressはシャットダウンと呼ばれる最後のアクションを実行する。
WordPressはここで動作を停止します。コードを実行し、ユーザーが要求したウェブページを生成しました。
さて、あなたのウェブホスティングサーバーは、WordPressによって生成されたウェブページを送信することによって、ユーザーのリクエストに返信します。
このページにはHTML、CSS、Javascriptのコードが含まれており、ユーザーのブラウザーに画面上での表示方法を指示します。
驚きだろう?これらのことはすべてミリ秒以内に起こります。これらの最高のWordPressホスティングサービスのいずれかを使用している場合、あなたのページは、理想的には数秒でロードされます。
この投稿がWordPressの裏側でどのように動作しているかを知る一助となれば幸いです。WordPressの管理エリアを保護するためのヒントや、WordPressの便利なTips、トリック、ハックを紹介したこちらのガイドもご覧ください。
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
MJB
hm – I am kind of missing step 0
so is this a correct assumption`?
a URL comes in at my hosted webserver
requesting let’S say my home page
then the webserver fires up step (1) ?
which then runs until step (24)
where WP parses the incoming URL to figure out next steps?
WPBeginner Support
Step 0 can certainly be a URL linking to the site, around step 15 is where the specific page would be considered.
管理者
Mike Ross
What about index.php in the root?
I don’t get it…There are guides out there that lay out a totally different sequence of WordPress initialization.
WPBeginner Support
Index.php would be for the theme files, we cover the theme hierarchy in our guide below:
https://www.wpbeginner.com/wp-themes/wordpress-template-hierarchy-explained/
管理者
Mike Ross
No, I’m not talking about the theme’s homepage template. I’m taking about the index.php at the root, which is a part of the WordPress core. It triggers wp-blog-header.php, which then loads wp-load.php which sets up the entire WordPress environment.
WPBeginner Support
The index.php in the root folder tells WordPress to load your theme
管理者
Terry Woods
That is correct
Jason
Why start from wp-config.php ? I thought it was from index.php
WPBeginner Support
That would be for themes and not WordPress itself, for the index.php you would want to take a look at the template hierarchy in our guide below:
https://www.wpbeginner.com/wp-themes/wordpress-template-hierarchy-explained/
管理者
Petru Ciucur
This is THE Article. Thanks !
WPBeginner Support
Glad our guide was helpful
管理者
Juan Johnson
HI wpbeginner.
I noticed that in your sequence, you mentioned that wp does this and then that. Physical, where is the instance of wp()? On the server? Does this happens in between an initial load page post request when I use google browser and the final loading of the wp dashboard after login?
WPBeginner Support
You may want to take another look at the infographic for understanding the loading and how it works.
管理者
Juan Johnson
I am a programmer. I am getting more into the web page design, however, I cannot let go of wanting to know what is going on behind the scenes. You article has given me a foundation to start confidently constructing web pages.
WPBeginner Support
Glad our guide was helpful
管理者
Paul McDevitt
This is brilliant. Ran into several issues with old, expired plugins, updating PHP, etc, and a virus (probably because of the prior items.) So all locked down and scrubbed up now, but wanted to understand better the sequence of events as looking into any one PHP file is like trying to read a bowl of spaghetti, as I did not understand the sequencing of the activities. So absolutely amazing. Love this.
Thanks
WPBeginner Support
Glad our article was helpful
管理者
Naresh
very clear article.
WPBeginner Support
Thank you
管理者
Chinenye
I want to really know what wordpress does, how can I make and share posts through word press? What does it do for me apart from creating a site?
WPBeginner Support
WordPress allows you to create a site without needing to have knowledge of HTML and CSS. For sharing your posts, you would normally want to take a look at social media plugins: https://www.wpbeginner.com/plugins/best-social-media-plugins-for-wordpress/
管理者
ganesh
very interesting
Adrian
Interesting but not really a definition of how Wordpress works. This describes what it does, not how it does it. Would be useful to also know how it does things as well as what it does. For example how does it know which theme to load? Without the how all the above is very high level.
amir saleem
17. Load Child Theme’s functions.php File
The functions.php file acts as plugin and is used in WordPress themes to add theme specific features to your website. If you are using a child theme, then WordPress will now load your child theme’s functions.php file.
Otherwise, it will go on and load your current active theme’s functions.php file.
18. Load Parent Theme’s functions.php File
[ If you are using a child theme ], then WordPress will now load your parent theme’s functions.php file.
check the text in brackets and match all the wording here will be replace [ if you are using a parent theme ].
Thanks.
Caleb
Amir, I think what the OP is trying to say is that if there is a child theme, then obviously there would be a parent and child functions.php and wordpress first loads the child themes functions.php before loading the parent’s. Otherwise, it just loads the parent’s functions.php straightaway.
Altab Hossen
Thanks for this nice explanation and info-graphics is so cool !!
Kristian
And people wonder why WordPress sites are slow. It does all that at run-time for every single page view!
Johnpaul Onwueme
Thanks for the info graphics
deborah
still seems complicated to me, but all tech does
Jason
Would you be willing to offer this as a printed poster? I don’t know if it would generate much interest or make you any money, but since it is such a nice graphic it might make a nice office wall hanging.
anis
Thank you for this article . I wanted to know since long time
the different steps for loading .
What is a database abstraction layer and how to configure it ?