web-dev-qa-db-ja.com

Wordpress wp-load.php

プラグインをリバースエンジニアリングしようとしています: 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.phpwp-settings.phpwp-config.php等...)
プラグインがすでに実行されているという事実は、wp-load.phpがロードされていることを意味しませんか?
また、他のファイルも含む可能性のある非常に多くのファイルが含まれているため、リソースが完全に無駄になり、必要なファイルの無限ループのように、それぞれが別のファイル内で2回ロードされます。他のプラグインもこの種の方法を使用する場合)

それで、それは正確に何をしますか?

PS; Google-ingで見つけたのは、それを正しく含める方法です(パスは変更可能であるため)-しかし、それは私の問題/質問ではありません。

13
Asaf

私の質問は...このwp-load.phpファイルには、コードが必要とする正確に何が必要ですか?

すべてのコアWordPress機能。これには、テーマファイル、アクティブなプラグインのすべてのファイルなどが含まれます。[〜#〜] but [〜#〜]ローディングWordPressこの方法では、要求された構文解析は行われません。 URLで、WordPressクエリを実行しません(WPオブジェクトもWP_Queryオブジェクトも初期化することにより)。

それを見て、私が理解しているのは、サイトが正しく実行されるために重要なコアwordpressファイルをロードすることだけです(functions.phpwp-settings.phpwp-config.phpなど...)

はい、あなたは正しく理解しました。

プラグインが実行されているという事実は、wp-load.phpがロードされていることを意味しませんか?

プラグインコードがWordPressによって呼び出された場合(たとえば、管理ページを表示するため、または最初にロードされたプラグインファイルに含まれていた場合)-はい、それはwp-load.phpがすでにロードされていることを意味します。

ただし、プラグインがWordPressを使用したページ(http://example.com/wp-content/plugins/my-plugin/sample.phphttp://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回ロードされます。一種の方法も)

_oncerequire_once(...の部分に注意してください。これにより、PHPがファイルをインクルードするように指示されますonlyまだインクルードされていない場合。したがって、競合は発生せず、PHPが使用するメモリが多すぎることはありません。ただし、WordPressがすでに開始されているコンテキストでは、require関数を呼び出さないでください。


したがって、基本的にプラグインの作成者は、このコードが見つかったプラグインファイルに対していくつかのリクエストが行われることを期待しています。著者はこのファイルでWordPress機能を使用したいので、コア関数をロードするためにwp-load.phpファイルを呼び出します。

これはサーバーの負荷を軽減するために行われると思いますが、plugins_loadedアクションフックで実行される2つのフックとホームURLに追加されたカスタム$_GETパラメーターを使用しても、結果はかなり近いはずです。

私は個人的に2番目のオプションを好みますが、wp-load.phpwillを含めて、WordPressが複雑なもの(URL解析とデータベースクエリ)を実行しないようにしました。

それでも何かがあり、それについてあなたが完全に理解していない場合-ここにコメントを投稿して、さらに説明しようと思います。

30

wp-load.phpは、WordPress環境をブートストラップして、プラグインがネイティブWordPress Core関数を使用できるようにするための環境です。

今は

プラグインが実行されているという事実は、wp-load.phpがロードされていることを意味しませんか?

どういたしまして!

プラグインファイルに直接アクセスしても、WordPress環境全体があり、wp-load.phpを含めない限り、ネイティブコア関数を使用できないという意味ではありません。

4
Bainternet

私が読んだことから、データベースの使用が必要な場合は通常プラグインにwp-loadが含まれていますが、これは多くの問題を引き起こすため、不適切な選択です。ここに関連記事がいくつかあります: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (このリンクが削除された場合は こちらのページをご覧ください

4
tix3

これは、ファイルが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'));
}
2
user3916019

_wp-load.php_は、外部スクリプトからWPをロードする1つの方法であり、他の機能の中でWP関数を使用できます。

しかし、あなたが言うように、それはプラグインなので必要ありません。それでも、質問のどこでコードを見つけたのかは説明しません。たとえば、たとえスタイルシートディレクトリとは異なるディレクトリにあるフロントエンドページやスクリプトでは、実際に_wp-load.php_が必要だからです。プラグインの一部です。

管理領域のプラグインページは再ロードする必要はありませんWP既にロードされているため、フロントエンドページはロードする必要があります。

つまり、WP関数と変数にアクセスするために_wp-load.php_を含める理由はいくつかあります。

1

おそらくダブルチェックです。

require_once()は、既にロードされている場合、再度ロードされないことを意味します。

1