プラグインをリバースエンジニアリングしようとしています: http://wordpress.org/extend/plugins/wordpress-social-login/
その一部には、次の行があります。
(最初の1つを理解するのに苦労しています。残りは、それを実行するために何かがある場合に参照するためだけにあります。)
require_once( dirname( dirname( dirname( dirname( __FILE__ )))) . '/wp-load.php' );
define( 'WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL', plugins_url() . '/' . basename( dirname( __FILE__ ) ) );
define( 'WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL', WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL . '/hybridauth/' );
私の質問は...コードで必要とされるこのwp-load.php
ファイルの内容は何ですか?それを見ると、私が理解しているのは、サイトが正しく動作するために重要なコアwordpressファイルをロードすることです(functions.php
、wp-settings.php
、wp-config.php
等...)
プラグインがすでに実行されているという事実は、wp-load.php
がロードされていることを意味しませんか?
また、他のファイルも含む可能性のある非常に多くのファイルが含まれているため、リソースが完全に無駄になり、必要なファイルの無限ループのように、それぞれが別のファイル内で2回ロードされます。他のプラグインもこの種の方法を使用する場合)
それで、それは正確に何をしますか?
PS; Google-ingで見つけたのは、それを正しく含める方法です(パスは変更可能であるため)-しかし、それは私の問題/質問ではありません。
私の質問は...この
wp-load.php
ファイルには、コードが必要とする正確に何が必要ですか?
すべてのコアWordPress機能。これには、テーマファイル、アクティブなプラグインのすべてのファイルなどが含まれます。[〜#〜] but [〜#〜]ローディングWordPressこの方法では、要求された構文解析は行われません。 URLで、WordPressクエリを実行しません(WPオブジェクトもWP_Queryオブジェクトも初期化することにより)。
それを見て、私が理解しているのは、サイトが正しく実行されるために重要なコアwordpressファイルをロードすることだけです(
functions.php
、wp-settings.php
、wp-config.php
など...)
はい、あなたは正しく理解しました。
プラグインが実行されているという事実は、wp-load.phpがロードされていることを意味しませんか?
プラグインコードがWordPressによって呼び出された場合(たとえば、管理ページを表示するため、または最初にロードされたプラグインファイルに含まれていた場合)-はい、それはwp-load.php
がすでにロードされていることを意味します。
ただし、プラグインがWordPressを使用したページ(http://example.com/wp-content/plugins/my-plugin/sample.php
やhttp://example.com/?my_plugin_action=sample
など)ではなく、単一のファイル(http://example.com/wp-admin/admin-ajax.php
など)にリクエストを送信する場合もあります。
最初のURLがmy-plugin
プラグインディレクトリ内の特定のファイルを参照し、2番目のURLが特定のクエリ引数が追加されたサイトのホームページに移動する方法、または3番目の例(参照されるファイルがadmin-ajax.php
ディレクトリ内のwp-admin
である)を参照してください-これプラグインがAJAXリクエストを簡単に作成できるようにする特別なファイルです(このファイルはWordPressコアもロードし、いくつかのアクションフックを起動します)。
最初の参照の場合、プラグインがWordPress機能(データベースの参照、投稿の操作など)を使用したい場合、次の方法でWordPressコアファイルをロードする必要があります。 wp-load.php
を含みます。
また、他のファイルを含む可能性のある非常に多くのファイルが含まれているため、リソースが完全に無駄になり、必要なファイルが無限ループになり、それぞれが別のファイル内に2回ロードされます。一種の方法も)
_once
のrequire_once(...
の部分に注意してください。これにより、PHPがファイルをインクルードするように指示されますonlyまだインクルードされていない場合。したがって、競合は発生せず、PHPが使用するメモリが多すぎることはありません。ただし、WordPressがすでに開始されているコンテキストでは、require
関数を呼び出さないでください。
したがって、基本的にプラグインの作成者は、このコードが見つかったプラグインファイルに対していくつかのリクエストが行われることを期待しています。著者はこのファイルでWordPress機能を使用したいので、コア関数をロードするためにwp-load.php
ファイルを呼び出します。
これはサーバーの負荷を軽減するために行われると思いますが、plugins_loaded
アクションフックで実行される2つのフックとホームURLに追加されたカスタム$_GET
パラメーターを使用しても、結果はかなり近いはずです。
私は個人的に2番目のオプションを好みますが、wp-load.php
willを含めて、WordPressが複雑なもの(URL解析とデータベースクエリ)を実行しないようにしました。
それでも何かがあり、それについてあなたが完全に理解していない場合-ここにコメントを投稿して、さらに説明しようと思います。
wp-load.php
は、WordPress環境をブートストラップして、プラグインがネイティブWordPress Core関数を使用できるようにするための環境です。
今は
プラグインが実行されているという事実は、wp-load.phpがロードされていることを意味しませんか?
どういたしまして!
プラグインファイルに直接アクセスしても、WordPress環境全体があり、wp-load.php
を含めない限り、ネイティブコア関数を使用できないという意味ではありません。
私が読んだことから、データベースの使用が必要な場合は通常プラグインにwp-loadが含まれていますが、これは多くの問題を引き起こすため、不適切な選択です。ここに関連記事がいくつかあります: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (このリンクが削除された場合は こちらのページをご覧ください )
これは、ファイルがwp-contentディレクトリー内のレベルに関係なく、どこかにある場合、まだロードされていなければwp-load.phpを含みます。
if(!defined(ABSPATH)){
$pagePath = explode('/wp-content/', dirname(__FILE__));
include_once(str_replace('wp-content/' , '', $pagePath[0] . '/wp-load.php'));
}
_wp-load.php
_は、外部スクリプトからWPをロードする1つの方法であり、他の機能の中でWP関数を使用できます。
しかし、あなたが言うように、それはプラグインなので必要ありません。それでも、質問のどこでコードを見つけたのかは説明しません。たとえば、たとえスタイルシートディレクトリとは異なるディレクトリにあるフロントエンドページやスクリプトでは、実際に_wp-load.php
_が必要だからです。プラグインの一部です。
管理領域のプラグインページは再ロードする必要はありませんWP既にロードされているため、フロントエンドページはロードする必要があります。
つまり、WP関数と変数にアクセスするために_wp-load.php
_を含める理由はいくつかあります。
おそらくダブルチェックです。
require_once()は、既にロードされている場合、再度ロードされないことを意味します。