0

私が書いたphpファイルを含むページがあります

HTML

<div id="playlists_div_holder">
    <?php include(dirname(__FILE__) . '/includes/get_playlists.php'); ?>
</div>

ユーザーが何かをアップロード (追加/削除) した場合に備えて、プレイリストを更新するボタンを作成しました。ファイルを取得してその div に戻す ajax リクエストを使用してそうしようとしていますが、受信しています500 エラー。

WordPressでこれを行っているため、問題になる可能性があります。

ボタン

 <span class="button-primary refresh-playlists" onclick="ReloadPlaylists()">Refresh Playlists</span>

Ajax リクエスト

function ReloadPlaylists() {
  jQuery.get('<?php echo plugins_url();?>/Player/includes/get_playlists.php', function(data) {
      jQuery('#playlists_div_holder').html(data);
      alert('Load was performed.');
    });
}

それを含めると機能しますが、ajax get は 500 エラーをスローします

4

2 に答える 2

0

あなたのコメントに基づいて、

8 行目で未定義関数 get_option への呼び出しを取得しています。これは、初めてインクルードしたときに機能するため、奇妙です。他のファイルで同じファイルを呼び出しており、何らかの変数の競合があるためでしょうか?

これは、プラグインがインクルードとして実行されている場合、プラグイン コードが実行される前にすべての wp-includes が読み込まれるためです。ただし、そのファイルに直接 AJAX 呼び出しを行うと、wp-includes が読み込まれないため、機能しget_option()ません。

include_once("../../../wp-blog-header.php");get_playlists.php ファイルの上に追加することで修正できます。それはあなたのプラグインを壊すかもしれません(確かではありません)ので、その場合、このような条件の中で安全に使用できます

if(stristr($_SERVER["REQUEST_URI"], get_playlists.php))
    include_once("../../../wp-blog-header.php");

ただし、これを行うと、その URL が Wordpress URL Rewrite に登録されていないため、AJAX リクエストを行うとエラー 404 が返されます。関数を使用してそれをオーバーライドできますheader()

if(stristr($_SERVER["REQUEST_URI"], get_playlists.php)) {
    include_once("../../../wp-blog-header.php");
    header("HTTP/1.1 200 OK");
}
于 2013-09-07T20:12:24.890 に答える