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

如何记录发送到wp-admin/admin-ajax.php的请求及对应响应内容

WordPress admin-ajax.php 请求记录排查方案

定向记录指定插件请求(推荐,零核心修改)

该方案只会记录你自研插件的AJAX请求,不会采集其他接口数据,对生产环境性能影响极小,无需修改WordPress核心文件。
你可以直接将以下代码添加到当前主题的functions.php文件,或者你自研插件的主入口文件中:

// 定向记录指定admin-ajax接口的请求与响应数据
add_action('admin_init', 'log_custom_admin_ajax_data', 1);
function log_custom_admin_ajax_data() {
    // 请替换为你插件注册AJAX接口时使用的action名称
    $target_action = 'your_custom_action_name';
    // 仅匹配目标AJAX请求
    if (defined('DOING_AJAX') && DOING_AJAX && isset($_REQUEST['action']) && $_REQUEST['action'] === $target_action) {
        // 组装请求日志数据
        $log_info = [
            'request_time' => current_time('mysql'),
            'user_ip' => $_SERVER['REMOTE_ADDR'],
            'request_headers' => getallheaders(),
            'request_params' => $_REQUEST
        ];
        // 捕获响应输出
        ob_start(function($response_buffer) use ($log_info) {
            $log_info['response_code'] = http_response_code();
            $log_info['response_content'] = $response_buffer;
            // 日志存储路径,请提前创建对应目录并配置禁止公网访问
            $log_path = WP_CONTENT_DIR . '/uploads/private_ajax_log/'.date('Y-m-d').'.log';
            file_put_contents($log_path, json_encode($log_info, JSON_UNESCAPED_UNICODE).PHP_EOL, FILE_APPEND);
            return $response_buffer;
        });
    }
}

配置注意事项

  • 提前在wp-content/uploads/目录下创建private_ajax_log文件夹,权限设置为755
  • 在该目录下创建.htaccess文件,写入以下内容禁止公网访问日志文件:
    deny from all
    
  • 排查完成后请及时删除日志代码和日志文件,避免占用存储空间和泄露敏感信息

全量记录所有admin-ajax请求(需服务器权限)

如果你需要验证是否存在CDN、服务器层面的缓存命中,可以直接在Web服务器配置中添加专属日志规则。

Nginx配置示例

首先在Nginx全局http块中定义自定义日志格式:

log_format admin_ajax_log '$time_local | $remote_addr | $request_method | $request_uri | '
                          '$status | $request_time | $upstream_cache_status | '
                          '"$http_user_agent" | $request_body | $sent_http_cache_control';

然后在对应站点的server块中添加匹配规则:

location ~* /wp-admin/admin-ajax.php {
    access_log /var/log/nginx/wp_admin_ajax.log admin_ajax_log;
    # 保留原有的admin-ajax.php处理配置(如fastcgi_pass相关规则)
}

配置完成后重载Nginx即可生效,日志中$upstream_cache_status字段会直接显示缓存命中状态:HIT为命中缓存,MISS为未命中缓存,BYPASS为跳过缓存。

Apache配置示例

在站点虚拟主机配置中添加以下规则:

SetEnvIf Request_URI "^/wp-admin/admin-ajax.php" is_admin_ajax
CustomLog /var/log/apache2/wp_admin_ajax.log "%t | %h | %m | %U | %s | %D | %{Cache-Control}o | %{User-Agent}i" env=is_admin_ajax

重载Apache后即可生成专属日志。

缓存问题验证方法

拿到日志后可以通过以下特征确认是否为缓存导致的异常:

  • 相同请求参数下,服务器时间已变更但响应内容完全一致
  • 响应头Cache-Control字段被设置了超过1秒的强缓存时间
  • 服务器日志中upstream_cache_status出现HIT状态(正常情况下admin-ajax请求应该全部为BYPASS或者MISS)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:24:03