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

How to output JSON for WordPress search page using 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();

?>

但是,我收到一条错误消息,提示 headers 已发送。

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/NBC/wp-content/plugins/relevanssi/lib/search.php:554) in /Applications/MAMP/htdocs/NBC/wp-content/themes/NBC/search.php on line 3

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

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

请注意,查询确实 return 结果,但我在页面上也遇到了这些错误,这导致我收到无效的 JSON 数据。

谢谢!

如果我在 wp-config.php

中关闭 WP_DEBUG,问题就会消失
define('WP_DEBUG', false);

这一定与我不明白的 WordPress 内部结构有关。

Relevanssi 3.5.11 有一个小错误。它不会以任何方式影响插件的使用,但启用 WP_DEBUG 后,它会发出未定义变量的通知。这就是您看到 "headers already sent" 错误的原因。

如果你想保持 WP_DEBUG 启用,你需要修复那个错误。修复很简单:将此添加到第 382 行的 lib/search.php 以定义变量。

$non_post_post_type = NULL;

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