フリーランスウェブエンジニアがウェブ全般について綴るブログ|いしかわろぐ
PR PR

「if ( ! defined( ‘ABSPATH’ ) ) exit;」って?【WordPressプラグイン申請】

「if ( ! defined( 'ABSPATH' ) ) exit;」って?【WordPressプラグイン申請】 ウェブ制作・運用
ウェブ制作・運用WordPress
本ページはプロモーションが含まれています

WordPressのプラグインを作成し申請。
申請して2日目、レビュー待ちをしていたところにメールが1通届きました。
レビューはしてくれたようですが、メールの文頭には”There are issues with your plugin code.”の一文。プラグインのコードに問題有りということですね。
文を読み進めると、”Allowing Direct File Access to plugin files”と問題点が書かれており、プラグインファイル(PHP)に直接アクセスできてしまうことが問題とされているようでした。

if ( ! defined( 'ABSPATH' ) ) exit;

しかも丁寧に対処法まで書かれており、全てのPHPファイルのコードの文頭に上記コードを記述するようにとのこと。ん、「ABSPATH」って何?
WordPressでは初歩のコードなのかもしれませんが、ちょっと気になったので調べてみました。

WordPressプラグインレビュー担当者の丁寧な対応

初めてのWordPressプラグイン申請。
プラグインを作るのも初めてな上、申請も初めてだったので正直すんなりとOKになるとは思っていなかったところ……。
「if ( ! defined( 'ABSPATH' ) ) exit;」って?【WordPressプラグイン申請】
前日のようにメールが届いたのでした。コードに問題があるって、やっぱり。
内容はすぐに対応できるものでホッとしたのですが、それにしてもレビューした上に対処法まで書いてメールをくれるとは思いませんでした。
しかもやりとりはこのメールに返信する形で続きます。担当者からの返信も早くて驚きました。
ちなみにこのやりとりには続きがあったのですが、そのことについてはまた最後に。

ABSPATHに定義されているのはwp-config.phpまでのパス

メールに書かれた対処法に従えば、指定のコードをPHPファイルのコードの文頭に追加するだけのようですが、コードをまずは調べてみます。

if ( ! defined( 'ABSPATH' ) ) exit;

まず、プラグインファイル内のコードでABSPATHを出力してみることに。
“print_r(ABSPATH);”としてみると、”/Users/ユーザ名/opt/WP導入ディレクトリ/”(ローカル構築)という形で出力されました。
definedは指定した名前の定数が存在するかどうかを調べる関数。
どうやら、WordPressを導入したディレクトリまでのパスが”ABSPATH”という定数に定義されているようです。
ここで思い出しました。ABSPATHってどこかで見た記憶があったんですよね。
ということでwp-config.phpのコードを見てみると、やっぱり最下部の方にありました。

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
  define('ABSPATH', dirname(__FILE__) . '/');

wp-config.phpで定義されているんですね。
ABSPATHは”Absolute Path”のことで、WordPressが導入されたディレクトリ、つまりwp-config.phpが置かれたディレクトリまでのパスが定義されているようです。

if ( ! defined( ‘ABSPATH’ ) ) exit; を全てのプラグインPHPファイルに追加

コードの内容がわかったので、プラグインに使っている全てのPHPファイルの文頭に、

if ( ! defined( 'ABSPATH' ) ) exit;

のコードを追加していきます。
コードを追加後、プラグインが正しく動作するかを確認。
また、直接ブラウザからPHPファイルにアクセスして、上記コード以下のコードが動作しないか(exitが効いているか)を確認します。
確認後に担当者宛に修正した旨を返信して作業完了です。

まとめ

さて、ここまででABSPATHの意味もわかりプラグインのコードも修正完了。
これで安泰かなとホッとしていたところ、コード修正のメールを送信してすぐに担当者よりメールが返ってきました。
メールの文面は短くたった2行。

You need to remove this:
print_r(ABSPATH);

担当者さんホントすみません。。w

 

オススメ
アイテム

「if ( ! defined( 'ABSPATH' ) ) exit;」って?【WordPressプラグイン申請】
サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

コメント

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