wp_load または wp_config を含めたり要求したりせずに、スタンドアロンのページが WordPress の機能にアクセスできるようにするにはどうすればよいですか?
プラグインを開発しており、スタンドアロンの php ページで WP データベースへのアクセスを許可する必要があります。このページは、表示する完全な HTML ページを返す単純な curl 要求です。文脈上、プラグインは、完全な求人広告 (完全な HTML ページ) にリンクする必要がある API からの求人のリストです。
私が現在持っているコードはこれです(jobad.phpページにあります):
$root = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
if (file_exists($root.'/wp-load.php')) {
require_once($root.'/wp-load.php');
}
これは、これを達成する方法について見つけたすべての回答から引き出したコードです。wordpress.org 自身のフォーラムからのインクルード。たとえば、このstackoverflowの回答から:スタンドアロンスクリプトでWPDBを使用していますか?
正常に動作しますが、プラグインを WP ディレクトリに送信しようとすると、このように wp_load.php を含めることでプラグインが拒否されました。そうしないのは理にかなっていますが、WordPress 内でファイルを機能させる他の方法が見つかりません。
必要な結果
ショートコードによって生成されたリストから、各項目には完全な HTML ページを返すリンクがあります。この HTML ページは、URL ではなく cURL 応答として返されます (または、各リンクが iframe を駆動するようにすることもできます)。文脈のために、私はこの方法でリンクを構築しています
$job_ad_link = plugins_url( 'includes/jobad.php' , dirname(__FILE__) );
$job_id = //id from database;
<a href="'.$job_ad_link.'?sgjobid='.$job_id.'">link</a>
したがって、jobad.php を呼び出すと、正しい job_id に対して cURL 関数が実行され、cURL 応答が表示されます。cURL を AJAX として実行してこの問題を回避できますが、これは完全な HTML ページであるため、div で cURL を単純に返すことはできません。In a iframe はぎこちなく、不安定であり、私はむしろそれを使用したくありません (そして、試しても成功しませんでした)。
明確にするために、WordPress からの応答:
wp-config.php、wp-blog-header.php、wp-load.php、またはインクルードを介して直接呼び出さなければならない他のほとんどの WordPress コア ファイルをインクルードすることはお勧めできません。ファイルをロードする非常に正当な理由がない限り、そうするプラグイン。> すべての WordPress インストールがまったく同じファイル構造を持っているわけではないため、失敗する傾向があります。