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

WordPress插件rest_api_init钩子不触发问题求助

WordPress REST API路由注册失败排查方案

问题现象

  • 开发的WordPress插件在一台服务器正常运行,另一台服务器上REST路由无法注册,rest_api_init钩子未触发
  • wp_loaded钩子可正常触发,请求日志显示:
    • REQUEST_URI => /zuzz-club/v1/gc/1
    • CONTENT_TYPE => application/json
    • REQUEST_METHOD => POST

排查与解决步骤

1. 验证REST API是否可用

直接访问服务器域名下的/wp-json/路径:

  • 若返回JSON格式的API信息,说明REST API正常;
  • 若返回403/404,说明API被拦截,需排查:
    • 主机商是否禁用了REST API;
    • 安全插件(如Wordfence)是否设置了REST API访问限制;
    • .htaccess或Nginx配置中是否有屏蔽API路由的规则。

2. 刷新固定链接重写规则

WP REST API依赖固定链接的重写规则,若规则失效会导致路由无法识别:

  • 登录WP后台,进入「设置 → 固定链接」,选择非默认格式(如「文章名」),点击「保存更改」强制刷新规则;
  • Apache服务器检查.htaccess文件是否包含WP默认重写规则,且文件具备写入权限;
  • Nginx服务器确保配置文件中有正确的重写规则:
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    

3. 排查插件冲突

部分插件可能提前终止WP流程,导致rest_api_init钩子无法执行:

  • 临时禁用服务器上所有其他插件,仅保留目标插件测试;
  • 若恢复正常,逐个启用其他插件,定位冲突插件。

4. 检查环境版本差异

对比两台服务器的环境配置:

  • PHP版本:代码使用了短数组语法[],需PHP 5.4+,若目标服务器版本过低会报错;
  • WordPress版本:确保两台服务器WP版本一致,旧版本对REST API的支持存在差异;
  • 查看PHP错误日志,排查是否有语法错误、致命错误或函数禁用(如error_log被禁用)导致钩子代码无法执行。

5. 临时 workaround:手动在wp_loaded中注册路由

若rest_api_init始终无法触发,可在wp_loaded钩子中手动注册路由(仅在REST请求时执行):

add_action( 'wp_loaded', function() {
    if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
        error_log("wp_loaded: 手动注册路由");
        $result = register_rest_route( 'zuzz-club/v1', '/gc/(?P<id>\d+)', array(
            'methods' => [ 'POST', 'GET' ],
            'callback' => 'zuzz_gc_webhook',
            'permission_callback' => function () {
                return true;
            }
        ) );
        if ($result) {
            error_log("wp_loaded: 路由注册成功");
        } else {
            error_log("wp_loaded: 路由注册失败");
        }
    }
}, 10 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:27:13