プラグイン開発者がプラグインを直接アクセスから保護するのは一般的です。その方法は2つあります。
if ( ! defined( 'WPINC' ) ) die;
そして
if ( ! defined( 'ABSPATH' ) ) exit;
WPINCとABSPATHの違いは何ですか?どれがそれを行うための「正しい」方法ですか?
それらは次のように定義されています。
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );
dirname
は、親ディレクトリのパスを返すPHP関数です。そしてwp-includes
は一目瞭然です。
ABSPATH
はWPが最初にロードされるものの1つであり、また見栄えも良いので、優れていると思います。
if ( ! defined( 'WPINC' ) ) die;
とif ( ! defined( 'ABSPATH' ) ) exit;
はあなたのプラグインファイルへの直接アクセスを防ぐことによってセキュリティの層を追加します。 ABSPATH
は、WordPressのコアとなるPHP定数です。
あなたのプラグインファイルがWordPressの外部からアクセスされる場合、定数ABSPATH
またはWPINC
は定義されないので、プラグインコードを終了し、あなたのコードへの不正アクセスを防ぎます。
ABSPATH
とWPINC
はWordPressコアでは次のように定義されています。
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );
どちらも同じ目的で使用されます。
WPINCとABSPATHの違いは何ですか?
あなたは自分で確認することができます。 GitHubのWordPressミラーにある wp-load.php
だけです。
一見しただけでも、現在選択されている答えはABSPATH
がどのように定義されているかに関してはもはや正しくないことがわかります。そしてGitHub上の異なるタグを比較すると、ABSPATH
の定義が実際には時間とともに変化するのがわかります。
どれがそれを行うための「正しい」方法ですか?
これらがセキュリティのために使われているとすれば、私はABSPATH
に行きます。 ABSPATH
はWPブートストラップで最初に定義されているだけではなく、WPINC
は同じファイルの条件の下で定義されているため、将来的に後退する可能性が高くなります。
また、明示的な質問はありませんが、die
とexit
の両方を使用した例を示しました。公式のAPIドキュメントに基づいているdevdocs.io
によると、die
は exit
と同等であるため、どちらを選択しても違いはありません。
die
とexit
は両方とも引数を受け入れるので、異常終了時に暗号化されたバージョンタグや連絡先情報などの有用な情報を出力するためにそれらを使用するか、さらなる処理のために0
または-1
などの終了コードを渡すことができます。
注目すべきは、wp_die
も同じことです。 PHPビルトインと混同しないでください。ただし、プレーンテキストに加えてHTMLの出力に使用することをお勧めします。現在、WordPressコア全体で広く使用されています。 WordPress.orgで wp_die
を学んでください。