17

プラグインをリバースエンジニアリングしようとしています:http ://wordpress.org/extend/plugins/wordpress-social-login/

その一部には、次の行があります:(
最初の行を理解するのに苦労しています。残りの行は、何かすることがある場合に参照するためだけにあります。)

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コードで要求される必要があるこのファイルの正確な内容は何ですか?それを見て、私が理解しているのは、サイトが正しく実行されるために重要なコアワードプレスファイルをロードすることです(、、functions.phpなどwp-settings.phpwp-config.php
プラグインがすでに実行されているという事実は、wp-load.phpロードされていることを意味しませんか?
また、他のファイルも含む可能性のある非常に多くのファイルが含まれているため、リソースの完全な浪費であり、必要なファイルの無限のループのようであり、それぞれが2回読み込まれます..(または他のプラグインがこれを使用する場合はさらに多く)一種の方法も)

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

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

4

6 に答える 6

38

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

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

それを見ると、サイトが正しく実行されるために重要なコアワードプレスファイルをロードすることがわかります(functions.phpwp-settings.phpwp-config.phpなど...)

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

プラグインが既に実行されているということは、wp-load.php が読み込まれているということではないですか?

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

ただし、プラグインが、http://example.com/wp-content/plugins/my-plugin/sample.phpWordPress を利用したページ ( や など) ではなく、http://example.com/?my_plugin_action=sample単一のファイル ( など) にリクエストを送信する場合がありますhttp://example.com/wp-admin/admin-ajax.php

最初の URL がプラグイン ディレクトリ内の特定のファイルを参照し、my-plugin2 番目の URL が特定のクエリ引数が追加されたサイトのホームページに移動する方法、または参照されたファイルがディレクトリadmin-ajax.php内にある 3 番目の例を参照してください。wp-adminこれは特別な例です。これにより、プラグインは AJAX リクエストを簡単に行うことができます (このファイルは WordPress コアもロードし、いくつかのアクション フックを起動します)。

最初の参照の場合、プラグインが何らかの WordPress 機能 (データベースの参照、投稿の操作など) を使用したい場合は、wp-load.php.

また、他のファイルを含む可能性のある非常に多くのファイルが含まれているため、リソースの完全な浪費であり、必要なファイルがそれぞれ別のファイル内にあり、2 回読み込まれているようなものです.. (または、他のプラグインがこれを使用している場合はさらに多くのファイル)方法の種類も)

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


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

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

私は個人的には 2 番目のオプションを好みますが、前述のように、これを含めるwp-load.php 、WordPress が複雑な処理 (URL 解析やデータベース クエリなど) を実行できなくなります。

まだ何かわからないことがあれば、ここにコメントを投稿してください。さらに説明します。

于 2012-12-23T21:28:18.557 に答える
5

wp-load.phpプラグインがネイティブのWordPressコア機能を使用できるようにするWordPress環境のブートストラップを担当します。

今は

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

全くない!

プラグインファイルに直接アクセスする場合、それはWordPress環境全体を持っていることを意味するわけではなく、を含めない限りネイティブコア機能を使用することはできませんwp-load.php

于 2012-12-23T20:41:55.150 に答える
4

ファイルがレベルに関係なく 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'));
}
于 2014-08-06T20:56:47.330 に答える
1

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

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

于 2012-12-23T06:03:17.630 に答える
1

wp-load.php外部スクリプトから WP をロードする 1 つの方法であり、他の機能の中で WP 機能を使用できるようにします。

しかし、あなたが言うように、それはプラグインなので必要ないはずです. wp-load.phpそれにもかかわらず、たとえばプラグインの一部であっても、スタイルシートディレクトリとは異なるディレクトリにあるフロントエンドページまたはスクリプトに実際に必要であるため、質問でコードを見つけた場所を説明しません.

管理エリアのプラグイン ページは WP が既に読み込まれているため、再読み込みする必要はありませんが、フロントエンド ページはそれを読み込む必要があります。

要するに、wp-load.phpWP の関数と変数にアクセスできるようにするには、いくつかの理由があります。

于 2012-12-23T18:27:08.307 に答える