WordPressの構造とファイルの場所を理解しておこうとWordPressファイルの中身を見ながらテーマを読み込む順序を追いかけまくってたときに、「index.php」ファイルでふと立ち止まる。
PHPの処理じゃないことが書いてあったり、ディレクトリごとに置いてある場所によってもindex.phpの中身が違うので「このindex.phpはこんな処理をしてるんだな」とファイルの中身を理解できるようにしたい。
やっぱりWordPressで「index.phpファイルを自分で作成してない」「PHPの知識がない」場合はファイルの中身に書いてある意味が曖昧のままになってるのでサーバーのファイル構造からindex.phpがどんな読み込みをしてるのか調べないと次に進めない。本音は時間がかかるので後回しにしたい…
「それではだめだ自分!」誰にも聞くことなく自分の力だけで身につけた知識は財産になると思い込むことにしてWordPressのindex.phpを調べだす。
「初めは間違っててもいい少しでも進歩すれば」⇐言い聞かせてる
WordPressのindex.phpの中身は配置によっていろいろ
WordPressをインストールしてからディレクトリ構造は何も変更してない状態のフォルダ構成を見ると「index.php」はpublic_htmlのディレクトリ内やwp-content、pluginやthemeディレクトリと、いたるところにindex.phpが入っています。
というよりディレクトリとセットではいってる感じです⇐それでえんや!
index.phpファイルの中身を見てみるとPHPコードが一行しか書いてないファイルもあって、やたらと気になる。さすがにそれほどWordPressとPHPに詳しくない私が見ても「このindex.phpは必要なの?」と思えてしまうindex.phpもあります。
初心者感覚でWordPressに「同じファイルがそんなにあって意味はあるの?」から始まり「ファイル削除してもいいのでは?」となりましたが、それだと単純すぎるのでWordPressで使うindex.phpの中身を見て、どんな処理がされてるか意味を理解することにします⇐当然やろ
wp-contentのindex.php「silence is golden?」の意味
WordPressのテーマやプラグイン関係ファイルが入ってるwp-contentのテーマディレクトリのindex.phpの中身にどんなことが書いてあるかというと以下の書き方がしてあります。
<?php
// Silence is golden.
えっ?それだけ?
記述の意味を翻訳してみます。
<?php
// 沈黙は金なり。
「沈黙は金なり。」
翻訳したはいいけど全く意味が分かりませんでした。
だけど調べてみたら、上記のindex.phpの中身で書かれてる事はWordPressの動作に関係ないですが、index.phpが置いてあることには意味があり「見せたくないフォルダ」に配置して管理するフォルダ構造を表示されないようにできる。ダミーファイルとしての役割でセキュリティ対策といったところでしょうね。
ドメイン直下のindex.phpの中身
WordPressには他にもindex.phpがありますが、どちらかというとWordPressで使う知っておくべきindex.phpはドメイン直下に置いてあるindex.phpの中身が重要でした。もちろんファイルの中身の処理では違う処理をします。
そのドメイン直下のindex.phpはWordPressの起動のとき最初に動くindex.phpです。
index.phpに書いてあるPHPコードを見てみます。
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
そしてさらに上記の書いてあるindex.phpの中身の意味を翻訳してみます。
<?php
/ **
* WordPressアプリケーションの前面。このファイルは何もしませんが、ロードします
* wp-blog-header.phpこれはWordPressにテーマをロードするよう指示します。
*
* @パッケージワードプレス
* /
/ **
* WordPressテーマをロードして出力するようにWordPressに指示します。
*
* @var bool
* /
define( 'WP_USE_THEMES'、true);
/ ** WordPress環境とテンプレートをロードする* /
require(dirname(__FILE__)。 '/wp-blog-header.php');
先ほどの「沈黙は金なり」のindex.phpとは確実に書いてある中身が違いますね⇐当然
ファイル中身の一番上はindex.phpファイルで実行する処理の説明です。
「このindex.phpファイルはWordPressの入り口になるファイルで読み込むファイルです。WordPressにwp-blog-header.php読み込みます。」
という解釈になると思います。
実際にどんな処理をしてるか中身を見るとindex.phpの中で定数「WP_USE_THEMES」を定義して2行目に進む。
2行目はrequireでWordPressフォルダにあるwp-blog-header.phpを読み込んで実行する処理です。
PHPコードが書いてあるのは2行だけですがWordPressファイルを処理するために必要なindex.phpファイルはドメイン直下のindex.phpファイルでした。
テーマファイル作成で使うindex.phpの中身
テーマファイル作成は中身が空の「index.php」と「style.css」の2つのファイルを作成してテーマフォルダに置けば、とりあえずは作成したテーマファイルをWordPressで有効化することができます。
しかし肝心のWordPressテーマはファイルの中身が空なので表示が真っ白になります。
index.phpの中身で実行されるPHPコードをWordPressテーマ「twenty fifteen」を例として「index.php」の中身を見ると、WordPressがテーマをPHPで表示させる仕組みの基本が理解できました。
twenty fifteenのindex.php説明文
<?php
/ **
*メインテンプレートファイル
*
*これはWordPressテーマの中で最も一般的なテンプレートファイルです。
*テーマに必要な2つのファイルのうちの1つ(もう1つはstyle.css)。
*クエリに一致するものが他にない場合にページを表示するために使用されます。
*例えば、home.phpファイルが存在しない場合はホームページをまとめます。
*
上記説明文に続くindex.phpの中身ではWordPressで表示するパーツテンプレートを組み合わせて1つのページにする処理が実行されます。
パーツテンプレートはブログのヘッダー、フッター、サイドバーなどを各ブロックに分けてheader.phpやfooter.phpというファイルで作成します。
作成したパーツテンプレートをindex.phpの中で実行できるようにするにはパーツテンプレートを読み込める<?php get_header();?>や<?php get_footer();?>などの「インクルードタグ」をindex.phpに記述するとテンプレートファイルを実行して組み合わせていく処理が行われます。
インクルードタグについてはWordPress Codexが参考になります。
インクルードタグを使用したindex.phpはブラウザでリクエストがあった場合、パーマリンクURLを参照してルート/ドメインを参照し始めると、index.phpがWordPressの起動を始めて色んなPHPファイルを読み込み、ブログの各パーツを組み合わせHTMLファイルになっていくのがWordPressの動作の基本。
このあとに続く各ファイル実行の流れはWordPressの起動ファイルが読み込まれる順序を参考にしてみてください。
まとめ
index.phpはファイルの中身によってはセキュリティになる意味もあるけど、WordPressが処理を実行するために必要な役割も持ち合わせてるindex.phpもありました。
そしてindex.phpのファイルの中身でPHPが実行される処理の仕方ではWordPressの入り口としてindex.phpは必要で重要なファイルと言えます。
個人的にはもっと勉強しておこうと思います。