
WordPress后台编辑页面时出现“The response is not a valid JSON response”错误,通常源于短代码函数直接输出HTML(如使用echo或裸HTML),破坏了AJAX请求所需的纯净JSON格式;正确做法是使用输出缓冲(ob_start()/ob_get_clean())捕获并返回HTML字符串。
wordpress后台编辑页面时出现“the response is not a valid json response”错误,通常源于短代码函数直接输出html(如使用echo或裸html),破坏了ajax请求所需的纯净json格式;正确做法是使用输出缓冲(ob_start()/ob_get_clean())捕获并返回html字符串。
在WordPress中,当用户通过Gutenberg编辑器新增或更新页面时,系统会通过AJAX请求实时预览短代码内容(尤其是块编辑器对短代码的动态渲染)。此时,WordPress期望短代码回调函数严格返回字符串,且不能有任何额外输出(包括空格、换行、HTML标签直出等)——否则会导致HTTP响应体混入非JSON内容,从而触发“Invalid JSON response”错误。
你提供的插件代码问题在于:
function testfunc () {
?>
<div class="testcl">test</div>
<?php }这段代码在执行时会立即向PHP输出缓冲区写入HTML(等效于echo),而短代码机制要求函数必须返回渲染结果,而非直接输出。Gutenberg的AJAX处理器接收到包含HTML的混合响应后,无法解析为合法JSON,于是报错。
✅ 正确解法:使用输出缓冲捕获HTML并显式返回
<?php /*
* Plugin Name: Test Shortcode
* Description: A safe shortcode plugin demonstrating proper output handling.
*/
function testfunc() {
ob_start(); // 启动输出缓冲
?><div class="testcl">test</div>
<?php return ob_get_clean(); // 获取并清空缓冲区内容,作为字符串返回
}
add_shortcode('test', 'testfunc');
?>? 关键要点:
-
ob_start()在函数开头启用缓冲,阻止HTML立即输出; -
ob_get_clean()获取当前缓冲区内容并清空它,确保返回的是纯净字符串; - 短代码函数绝不可调用
echo、print或含裸HTML的?>...<?php结构(除非包裹在缓冲逻辑内); - 即使HTML前后存在空白字符(如换行、缩进),缓冲机制也能安全捕获,避免意外输出。
⚠️ 额外注意事项:
- 若短代码需动态数据(如
get_post_meta),请确保在缓冲区内调用,并验证数据有效性; - 插件主文件中
<?php之后、?>之前不得有任何空白字符或换行符(尤其文件末尾),否则可能触发BOM或额外输出; - 开发阶段建议启用
WP_DEBUG_LOG,配合浏览器Network面板查看AJAX响应原始内容,快速定位非法输出源。
遵循此模式,你的短代码即可兼容经典编辑器与Gutenberg,彻底解决JSON响应异常问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











