
wordpress后台新建或更新页面时出现“the response is not a valid json response”错误,通常源于短代码函数直接输出html而非返回字符串——尤其在rest api或块编辑器(gutenberg)环境下,php未缓冲的echo/print会污染ajax/http响应体,破坏json格式。
wordpress后台新建或更新页面时出现“the response is not a valid json response”错误,通常源于短代码函数直接输出html而非返回字符串——尤其在rest api或块编辑器(gutenberg)环境下,php未缓冲的echo/print会污染ajax/http响应体,破坏json格式。
在WordPress插件开发中,短代码(shortcode)回调函数必须返回字符串,而不能直接输出(如使用裸HTML、echo或print)。你提供的原始代码中:
function testfunc () {
?>
<div class="testcl">test</div>
<?php
}这段代码在执行时会立即向HTTP响应流中输出HTML内容。当WordPress通过AJAX(例如古腾堡编辑器保存页面时触发的wp_ajax_save_post)或REST API处理请求时,后端期望返回纯JSON数据(如{"success":true,"data":{...}}),但短代码意外输出的<div class="testcl">test</div>会提前写入响应体,导致最终输出变成类似:
<div class="testcl">test</div>{"success":true,...}这显然不是合法JSON,浏览器解析失败,从而触发「The response is not a valid JSON response」警告。
✅ 正确做法是:使用PHP输出控制缓冲(Output Buffering)捕获HTML内容,并显式返回字符串。
立即学习“前端免费学习笔记(深入)”;
修改后的规范写法如下:
<?php
/*
* Plugin Name: Test Shortcode
* Description: A minimal shortcode plugin demonstrating safe HTML output.
*/
function testfunc() {
ob_start(); // 启动输出缓冲
?>
<div class="testcl">test</div>
<?php
return ob_get_clean(); // 获取并清空缓冲区内容,作为返回值
}
add_shortcode('test', 'testfunc');
?>? 关键要点说明:
-
ob_start()在函数开头启动缓冲,后续所有echo、print或裸HTML都将暂存于内存缓冲区,不会立即发送到客户端; -
ob_get_clean()获取当前缓冲区内容并清空它,返回字符串——该字符串被WordPress短代码系统接收并安全插入到文章内容中; - 短代码函数绝不应直接输出(无
return)、也不应调用exit/die,否则将中断WordPress正常流程。
⚠️ 补充注意事项:
- 若短代码内需动态生成内容(如查询数据库、调用WP函数),请确保在
ob_start()之后、ob_get_clean()之前执行,避免逻辑错位; - 避免在短代码中引入
var_dump()、error_log()(除非调试且已移除)或任何可能产生额外输出的调试语句; - 在生产环境中,建议启用
WP_DEBUG_LOG而非屏幕输出,防止日志内容意外泄露到响应流; - 如需兼容经典编辑器与古腾堡,此修复同样有效——因为问题本质是输出时机失控,而非编辑器差异。
遵循此模式,你的短代码即可安全嵌入任意页面、支持实时预览与无刷新保存,彻底消除JSON响应错误。



















