You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的WordPress Ajax请求返回空对象?附functions.php代码

分析你的Ajax返回空对象的原因及解决方案

我帮你排查了代码里的几个关键问题,这些都是导致Ajax返回空对象的常见原因:

1. SQL语句存在语法错误

你的SQL查询末尾有明显的语法问题——双引号没有闭合:

$getPosts = $wpdb->get_results("SELECT ID FROM wp_posts WHERE post_status='publish' AND post_type='post' LIMIT 3 OFFSET ".$interval.");

正确的写法应该把末尾的".)改成'",另外更规范的做法是用$wpdb->prepare来避免SQL注入,同时适配不同的数据库前缀:

$getPosts = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status='publish' AND post_type='post' LIMIT 3 OFFSET %d",
        $interval
    )
);

2. 未正确注册WordPress Ajax动作

WordPress的Ajax请求必须通过特定钩子注册处理函数,否则服务器找不到对应的逻辑,会返回空内容。你需要在functions.php里添加注册代码:

// 给登录用户用的Ajax钩子
add_action('wp_ajax_get_news_recipes', 'get_news_recipes');
// 给未登录用户用的Ajax钩子(如果需要对外开放)
add_action('wp_ajax_nopriv_get_news_recipes', 'get_news_recipes');

注意这里的get_news_recipes要和你前端Ajax请求里的action参数完全一致。

3. 函数未输出JSON数据并终止执行

你的函数最后没有把整理好的$postArray以JSON格式输出,也没有终止WordPress的后续执行流程。建议在函数末尾添加:

// 先确保数组初始化,避免未定义报错
$postArray = array();
// ... 你的循环逻辑代码 ...
// 用WordPress内置函数输出JSON并自动终止执行,比手动echo更安全
wp_send_json($postArray);

如果不想用内置函数,也可以手动写,但必须终止执行:

echo json_encode($postArray);
die(); // 必须加这一行,否则WordPress会额外输出默认内容

4. 未对请求参数做安全校验

直接使用$_REQUEST['interval']存在两个风险:一是如果请求里没有这个参数会报错,二是存在SQL注入隐患。建议先做合法性检查:

// 把参数转为整数,默认值设为0
$interval = isset($_REQUEST['interval']) ? intval($_REQUEST['interval']) : 0;

5. 内容获取的潜在问题

使用get_the_content($id)时,默认不会处理短代码和格式,如果你需要处理后的最终内容,可以替换成:

$content = apply_filters('the_content', get_post_field('post_content', $id));

另外get_the_title($id)本身没问题,但如果遇到异常情况,也可以尝试用get_post($id)->post_title替代。

把这些问题逐一修复后,你的Ajax请求应该就能正常返回数据了。

内容的提问来源于stack exchange,提问作者user4747724

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:23:01