WordPressでインストールしたテーマや、子テーマを使うときに、必ずといってもいいほど出てくるのが、
「if ( !defined( ‘ABSPATH’ ) ) exit」 または 「defined( ‘ABSPATH’ ) || exit;」というコード。どちらも同じ処理を表します(書き方が異なるだけ)
この意味や目的、どんなときに必要で、どんな時に要らないのかを解説します。
if ( !defined( ‘ABSPATH’ ) ) exit の目的
「if ( !defined( ‘ABSPATH’ ) ) exit」 や 「defined( ‘ABSPATH’ ) || exit;」の目的は、外部から不正にアクセスされ処理を実行されるのを防ぐセキュリティです。
この記述をすることで、Wordpressを起動している本体からしか、phpの処理を実行できなくすることができます。
設置するべき場所と設置するべきでない場所
基本的には全てのphpファイルの冒頭で定義した方がいいとされています。ですが、時折設置してはいけない場合もあります。
目的は、「外部からの不正アクセスを防ぐこと」なので、外部に公開しないファイルには設置し、外部に公開するファイルには設置しないようにします。
AJAXやRESTFULL APIなど、ユーザーが直接操作するファイルには設置してはいけません。(※Wordpressにはadmin-ajax.phpが用意されているので、そういったケース少ないと思いますが、、)
if ( !defined( ‘ABSPATH’ ) ) exit の意味
大きく5つの要素に分けることができる
- if
- !
- defined
- ABSPATH
- exit
(1)「if」は、一文で記述するか書き方。 「if( 条件 ) 処理」が基本構文。カッコ内の条件がtrueなら、後ろの処理を実行する。
(2)「!」 は否定。「!条件」のように使い、指定した条件がtrueならfalseを、falseならtrueを返す。数値や文字列などの要素が来る場合は、空(nullなど)の場合、反転してtrueを返す。
(3)「defined」は指定した定数が存在するか調べ真偽値を返す。なお、PHPの定数は、「define(‘定数名’, 値);」か、「const ‘定数名’ = ‘値’;」で定義する。※定数名は大文字
(4) 「ABSPATH」はWordpressで定義された定数。ファイルパスを出力するように定義されている。例: /var/www/wp/。 ABSPATHについては後ほど詳細を説明。
(5) 「exit」は処理を終了する。ここでは、if文の条件がtrueになれば、後ろの処理を実行せずに強制終了させる。
つまり、定数ABSPATHが存在しなければ、後ろの処理を実行せず、強制終了する。となります。
defined( ‘ABSPATH’ ) || exit の意味
これは4つの要素に分けることができます。
- defined
- ABSPATH
- ||
- exit
3以外は上の式と共通です。異なるのは、「||」。
「||」とは、またはの意味で、「A || B」のように使います。Aがtrueなら、Bは実行しません。AがfalseならBを実行するとなります。
ABSPATHはどこで定義されているか?
WordPress本体の中で、ABSPATHが定義されているのは6箇所あります。
ファイル名 | ファイルの内容 | 定義例 |
wp-config.php | 設定ファイル | define( ‘ABSPATH’, __DIR__ . ‘/’ ); |
wp-load.php | WordPressの動作や起動に関連するファイルをロードするファイル | define( ‘ABSPATH’, __DIR__ . ‘/’ ); |
load-scripts.php | JavaScriptファイルを一つにまとめ出力するファイル | define( ‘ABSPATH’, dirname(__DIR__) . ‘/’ ); |
load-styles.php | CSSファイルを一つにまとめ出力するファイル | define( ‘ABSPATH’, dirname(__DIR__) . ‘/’ ); |
setup-config.php | WordPressインストール時の初期設定画面用のファイル | define( ‘ABSPATH’, dirname(__DIR__) . ‘/’ ); |
wp-config-sample.php | インストール時にwp-config.phpの元になるファイル | define( ‘ABSPATH’, __DIR__ . ‘/’ ); |
一番の大元は、wp-load.phpです。wp-load.phpの冒頭は以下のようになっています。
<?php
/**
* Bootstrap file for setting the ABSPATH constant
* and loading the wp-config.php file. The wp-config.php
* file will then load the wp-settings.php file, which
* will then set up the WordPress environment.
*
* If the wp-config.php file is not found then an error
* will be displayed asking the visitor to set up the
* wp-config.php file.
*
* Will also search for wp-config.php in WordPress' parent
* directory to allow the WordPress directory to remain
* untouched.
*
* @package WordPress
*/
/** Define ABSPATH as this file's directory */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
- 定数ABSPATHを設定するための、ブートストラップファイルです。
- もし、wp-config.phpがあればをロードします
- wp-config.phpは、wp-settigns.phpをロードします。
- もし、wp-config.phpがなければ、wp-config.phpをセットアップするか確認します。
- 親テーマのディレクトリなど、wordpress内でwp-congfig.phpがあるか探します。
これらのコメントアウトの下で、ABSPATHを設定しています。
__DIR__ と dirname(__DIR__) の違い
ABSPATHを定義するときに、__DIR__ と dirname(__DIR__)の2つが使われていますが、処理に違いはありません。どちらも同じく、ファイルのあるディレクトリパスを返します。
「__DIR__」は新しい書き方で、これが使えるのはPHP5.3以降です。
WordPressのファイル読み込みのおおまかな流れ
参考に、Wordpressサイトを構築するときのファイル読み込みのおおまかな流れを記述しておきます。(エラーなどがない場合)
No | ファイル名 | 内容 |
1 | index.php | 初期アクセス |
2 | wp-blog-header.php | WP環境とテンプレートをロード |
3 | wp_load.php | ABSPATHの設定 |
4 | wp_config.php | 設定ファイル(DB接続、言語など) |
5 | wp-settings.php | 定数、グローバル変数、関数、クラスの設定 |
この後に、functions.php, plugin.php, 各テンプレートなど様々なファイルがロードされていきます。