【WordPress】意味と目的:if ( !defined( ‘ABSPATH’ ) ) exit の使い方をわかりやすく解説

cording-php-html-css WordPress
記事内に広告が含まれていることがあります。

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つの要素に分けることができる

  1. if
  2. !
  3. defined
  4. ABSPATH
  5. 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つの要素に分けることができます。

  1. defined
  2. ABSPATH
  3. ||
  4. exit

3以外は上の式と共通です。異なるのは、「||」。

「||」とは、またはの意味で、「A || B」のように使います。Aがtrueなら、Bは実行しません。AがfalseならBを実行するとなります。

ABSPATHはどこで定義されているか?

WordPress本体の中で、ABSPATHが定義されているのは6箇所あります。

ファイル名ファイルの内容定義例
wp-config.php設定ファイルdefine( ‘ABSPATH’, __DIR__ . ‘/’ );
wp-load.phpWordPressの動作や起動に関連するファイルをロードするファイルdefine( ‘ABSPATH’, __DIR__ . ‘/’ );
load-scripts.phpJavaScriptファイルを一つにまとめ出力するファイルdefine( ‘ABSPATH’, dirname(__DIR__) . ‘/’ );
load-styles.phpCSSファイルを一つにまとめ出力するファイルdefine( ‘ABSPATH’, dirname(__DIR__) . ‘/’ );
setup-config.phpWordPressインストール時の初期設定画面用のファイル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ファイル名内容
1index.php初期アクセス
2wp-blog-header.phpWP環境とテンプレートをロード
3wp_load.phpABSPATHの設定
4wp_config.php設定ファイル(DB接続、言語など)
5wp-settings.php定数、グローバル変数、関数、クラスの設定

この後に、functions.php, plugin.php, 各テンプレートなど様々なファイルがロードされていきます。

タイトルとURLをコピーしました