web-dev-qa-db-ja.com

WPINCとABSPATHの違いは何ですか?

プラグイン開発者がプラグインを直接アクセスから保護するのは一般的です。その方法は2つあります。

if ( ! defined( 'WPINC' ) ) die;

そして

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

WPINCとABSPATHの違いは何ですか?どれがそれを行うための「正しい」方法ですか?

32
Daniel

それらは次のように定義されています。

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

dirnameは、親ディレクトリのパスを返すPHP関数です。そしてwp-includesは一目瞭然です。

ABSPATHはWPが最初にロードされるものの1つであり、また見栄えも良いので、優れていると思います。

18
Wyck

if ( ! defined( 'WPINC' ) ) die;if ( ! defined( 'ABSPATH' ) ) exit;はあなたのプラグインファイルへの直接アクセスを防ぐことによってセキュリティの層を追加します。 ABSPATHは、WordPressのコアとなるPHP定数です。

あなたのプラグインファイルがWordPressの外部からアクセスされる場合、定数ABSPATHまたはWPINCは定義されないので、プラグインコードを終了し、あなたのコードへの不正アクセスを防ぎます。

ABSPATHWPINCはWordPressコアでは次のように定義されています。

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

どちらも同じ目的で使用されます。

3
P M Aagjal

WPINCとABSPATHの違いは何ですか?

あなたは自分で確認することができます。 GitHubのWordPressミラーにある wp-load.php だけです。

一見しただけでも、現在選択されている答えはABSPATHがどのように定義されているかに関してはもはや正しくないことがわかります。そしてGitHub上の異なるタグを比較すると、ABSPATHの定義が実際には時間とともに変化するのがわかります。

どれがそれを行うための「正しい」方法ですか?

これらがセキュリティのために使われているとすれば、私はABSPATHに行きます。 ABSPATHはWPブートストラップで最初に定義されているだけではなく、WPINCは同じファイルの条件の下で定義されているため、将来的に後退する可能性が高くなります。

また、明示的な質問はありませんが、dieexitの両方を使用した例を示しました。公式のAPIドキュメントに基づいているdevdocs.ioによると、dieexit と同等であるため、どちらを選択しても違いはありません。

dieexitは両方とも引数を受け入れるので、異常終了時に暗号化されたバージョンタグや連絡先情報などの有用な情報を出力するためにそれらを使用するか、さらなる処理のために0または-1などの終了コードを渡すことができます。

注目すべきは、wp_dieも同じことです。 PHPビルトインと混同しないでください。ただし、プレーンテキストに加えてHTMLの出力に使用することをお勧めします。現在、WordPressコア全体で広く使用されています。 WordPress.orgで wp_die を学んでください。

1
Josh Habdas