0

我有一个页面,其中包含我这样编写的 php 文件

HTML

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

我创建了一个按钮来刷新播放列表,以防用户上传(添加/删除)任何内容,我正在尝试使用 ajax 请求来获取文件并将其包含回该 div,但我正在接收500 错误。

我在 WordPress 中这样做,所以这可能是一个问题。

按钮

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

阿贾克斯请求

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

很难猜出这个问题,但是您可以一直使用一些简单的解决方法:-

警告!请在做任何事情之前备份您的 WordPress。

第一种解决方法:-

  1. 下载新的 WordPress 副本
  2. 删除除 wp-content 文件夹外的所有文件夹。
  3. 再次上传所有文件和文件夹,除了 wp-content 文件夹。

第二种解决方法:-

改名

wp-content/themes

wp-content/themes-backup

新建一个文件夹:-

wp-content/themes

开始将主题备份中的每个主题一一复制到主题中,看看错误是否消失。

现在您对主题文件夹所做的一切,与插件文件夹完全一样。

于 2013-09-07T19:58:54.627 回答
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");

但是,一旦你这样做了,你会在发出 AJAX 请求时收到错误 404,因为该 URL 未在 Wordpress URL Rewrite 中注册。您可以使用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 回答