WordPress函数json_encode输出末尾出现NULL的问题求助
排查与解决JSON末尾多出null的问题
我来帮你分析下这个问题,大概率是脚本没有及时终止导致的,结合WordPress的运行机制,给你几个排查和解决思路:
最直接的解决方案:终止脚本执行
在WordPress中,如果你是通过AJAX或者类似场景调用这个函数,输出JSON后必须终止脚本,否则WordPress会继续执行后续的核心代码,可能输出额外的内容(比如你看到的null)。
修改你的函数,在echo $json之后添加wp_die()(WordPress推荐的终止方法,兼容AJAX等场景):
function see_get_basic_accuracy() { global $wpdb; $userid = apply_filters( 'determine_current_user', false ); wp_set_current_user( $userid ); $userID = get_current_user_id(); // 重要:修复SQL注入风险!用wpdb->prepare转义参数 $sql = $wpdb->prepare( "SELECT * FROM basic_accuracy_table WHERE user_id = %d ORDER BY recent_session ASC LIMIT 1;", $userID ); $results = $wpdb->get_results($sql); $json = json_encode($results); echo $json; wp_die(); // 关键:立刻终止脚本,防止后续输出 }
其他排查方向
如果添加wp_die()后还是有null,可以排查以下几点:
- 检查第三方代码干扰:暂时禁用所有插件,切换到WordPress默认主题(比如Twenty Twenty-Four),测试是否还出现
null。如果消失了,就逐个重新启用插件/主题,找到触发额外输出的代码。 - 检查文件多余输出:查看你存放这个函数的PHP文件,开头/结尾的PHP标签之外是否有空格、换行或者其他字符?这些可能会被输出,但这里是
null,可能性较低,但值得排查。 - 查看数据库查询错误:虽然你说返回了预期JSON,但可以临时添加错误日志排查SQL问题:
$results = $wpdb->get_results($sql); error_log( $wpdb->last_error ); // 会把SQL错误写入服务器日志 - 检查钩子冲突:是否有其他代码通过
shutdown、wp_footer等钩子输出了null?可以用remove_all_actions('shutdown')临时测试(仅限排查,不要留到生产环境)。
另外提醒下:你的原代码直接把$userID拼进SQL语句,存在SQL注入风险,上面的修改已经用$wpdb->prepare修复了这个问题,一定要保留这个写法!
内容的提问来源于stack exchange,提问作者Quint Rahaman
相关产品推荐
相关产品推荐

