我正在使用WordPress搜索插件Relevanssi。
我正在尝试自定义我的search.php
模板以输出 JSON,如下所示:
<?php
header('Content-Type: application/json');
$results = array();
if (have_posts()):
while (have_posts()):
the_post();
$results[] = array(
'permalink' => get_permalink(),
'title' => get_the_title()
);
endwhile;
endif;
echo json_encode($results);
die();
?>
但是,我收到一个错误,指出标头已发送。
警告:无法修改标头信息 - 标头已由 发送 (输出开始于/Applications/MAMP/htdocs/NBC/wp-content/plugins/relevanssi/lib/search.php:554) 在/Applications/MAMP/htdocs/NBC/wp-content/themes/NBC/search.phpon 第 3 行
有没有更好的方法可以做到这一点?我需要它作为 JSON 的原因是我想用 JS 使用它。
我以前在较旧的网站上做过此操作,所以也许问题出在我使用的最新版本上?3.5.11
请注意,查询确实返回结果,但我在页面上也收到这些错误,这导致我收到无效的 JSON 数据。
谢谢!
Relevanssi 3.5.11 有一个小错误。它不会以任何方式影响插件的使用,但在启用WP_DEBUG的情况下,它会为未定义的变量抛出通知。这就是为什么您看到"标头已发送"错误的原因。
如果要使WP_DEBUG保持启用状态,则需要修复该错误。修复很简单:将其添加到 lib/search.php第 382 行以定义变量。
$non_post_post_type = NULL;
此修复程序将包含在版本 3.5.12 中。
如果我在wp-config.php
中关闭WP_DEBUG
,问题就会消失
define('WP_DEBUG', false);
这一定与我不了解的WordPress内部有关。