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

WordPress站点Ajax请求functions.php报500错误的原因排查方法

错误原因排查
  • 错误1:直接请求主题目录下的functions.php文件。WordPress不支持直接向functions.php发起Ajax请求,该文件依赖WordPress核心上下文才能正常执行,直接访问会因缺少核心加载环境触发500错误或空白响应。
  • 错误2:请求类型与参数获取方式不匹配。前端发送的是GET类型请求,后端却使用$_POST获取参数,无法正确拿到传递的url_category值。
  • 错误3:缺少WordPress Ajax必备的action参数。wp_ajax_{action}和wp_ajax_nopriv_{action}钩子依赖请求中的action参数匹配处理函数,当前请求未传递action=get_case,后端注册的回调函数完全不会触发。
  • 错误4:回调函数未配置响应输出与终止逻辑。dk_get_case函数没有输出返回数据的逻辑,也没有调用wp_die()/die()终止执行,即使触发也不会返回正确响应。
修复代码

前端 main.js

(function($) {
    var url_category = location.href;
    // 使用WordPress官方Ajax接口地址
    var ajaxUrl = window.location.protocol + '//' + window.location.host + '/wp-admin/admin-ajax.php';
    $.ajax({
        url: ajaxUrl,
        type: "POST", // 改为POST和后端获取逻辑匹配
        data: { 
            action: 'get_case', // 新增action参数匹配注册的钩子
            url_category: url_category 
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("Failed!");
            console.log("XMLHttpRequest : " + XMLHttpRequest.status);
            console.log("textStatus     : " + textStatus);
            console.log("errorThrown    : " + errorThrown?.message);
        },
        success: function (response) {
            console.log("Success!");
            console.log(response);
            console.log(url_category);
        }
    });
})(jQuery);

后端 functions.php

add_action('wp_ajax_get_case', 'dk_get_case');
add_action('wp_ajax_nopriv_get_case', 'dk_get_case');
function dk_get_case() {
    header('Access-Control-Allow-Origin: *');
    $return = ['status' => false, 'data' => [], 'message' => ''];

    // 校验参数存在性并做安全过滤
    if (isset($_POST['url_category'])) {
        $url = sanitize_text_field($_POST['url_category']);
        $return['status'] = true;
        $return['data']['url'] = $url;
        $return['message'] = '参数获取成功';
    } else {
        $return['message'] = '缺少url_category参数';
    }

    // 输出响应并终止执行
    echo json_encode($return);
    wp_die(); // WordPress Ajax处理函数必须调用该方法终止执行
}

补充优化建议:建议在主题入队JS文件时通过wp_localize_script将admin-ajax.php地址注入到前端全局变量,避免不同站点路径配置不同导致请求地址失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:04