如何使用Relevanssi为WordPress搜索页面输出JSON?

时间:2017-07-05 16:11:57

标签: php json wordpress relevanssi

我正在使用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.php 上   第3行

有更好的方法吗?我需要它作为JSON的原因是我想用JS消费它。

我之前在旧网站上做过这个,所以问题可能与我使用的最新版本有关吗? 3.5.11

请注意,查询会返回结果,但我也会在页面上收到这些错误,这会导致我收回无效的JSON数据。

谢谢!

2 个答案:

答案 0 :(得分:1)

Relevanssi 3.5.11有一个小bug。它不会以任何方式影响插件的使用,但是如果启用了WP_DEBUG,它会抛出一个未定义变量的通知。这就是为什么你会看到已经发送过#34;标题的原因&#34;错误。

如果要保持启用WP_DEBUG,则需要修复该错误。修复很简单:在第382行将其添加到lib / search.php以定义变量。

$non_post_post_type = NULL;

此修复程序将包含在3.5.12版本中。

答案 1 :(得分:0)

如果我在WP_DEBUG

中关闭wp-config.php,问题就会消失
define('WP_DEBUG', false);

它必须与我不理解的WordPress内部有关。