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

WordPress自定义API端点报rest_no_route(404)错误求排查

排查WordPress REST API rest_no_route 404错误的解决方案

咱们先从你给出的代码细节和REST API路由常见坑点入手,一步步定位问题:

1. 先修正路由路径的合理性

你注册的路由是learn2/v1 + /api/,最终访问URL会是your-site.com/wp-json/learn2/v1/api/,这里有两个潜在问题:

  • 路径末尾的斜杠:虽然WordPress会自动处理,但多余的斜杠偶尔会导致匹配异常,建议去掉末尾斜杠,改成'/api'
  • 冗余的api字样:REST API本身已经通过wp-json标识,路由里重复写/api/容易混淆,建议改成更具语义的路径,比如'/webhook'

2. 确认钩子绑定是否真的生效

你用$this->loader->add_action('rest_api_init', $plugin_public, 'create_api_webhook')绑定路由注册函数,要确保:

  • $plugin_public这个类实例已经正确初始化,没有为空或未定义
  • 可以在create_api_webhook方法里加一行日志测试,确认函数是否被执行:
    error_log('REST route registration triggered');
    
    查看PHP错误日志,如果没有这条日志,说明钩子根本没触发——要检查你的loader类的add_action方法是否正确传递了回调(比如是不是应该用数组格式[$plugin_public, 'create_api_webhook']?如果是WP Plugin Boilerplate的loader,这个格式是对的,但要确认实例没问题)

3. 补全回调函数的完整性

你的代码里'callback...是截断的,必须确保:

  • 回调函数存在,并且是public权限(因为是类方法)
  • 回调函数格式正确,比如在$plugin_public类里:
    public function handle_webhook(WP_REST_Request $request) {
        return rest_ensure_response(['status' => 'success', 'data' => 'Hello from webhook']);
    }
    
    然后在register_rest_route里正确关联:'callback' => [$this, 'handle_webhook'],

4. 验证请求方法和权限设置

  • 你设置的methods是'GET',要确保测试时用的是GET请求(比如浏览器直接访问,或者curl命令:curl -X GET your-site.com/wp-json/learn2/v1/api/),如果用POST请求会直接返回404
  • 临时添加'permission_callback' => '__return_true'跳过权限验证,测试路由是否能正常访问,排除权限问题导致的404

5. 检查WordPress固定链接设置

REST API依赖“非朴素”的固定链接模式,如果你当前是“朴素”模式(即?p=123这种URL),必须到设置→固定链接里改成“文章名称”或其他模式,保存设置后再测试路由。

修正后的示例代码

// 确保钩子绑定正确
$this->loader->add_action('rest_api_init', $plugin_public, 'create_api_webhook');

public function create_api_webhook() {
    // 简化路径,使用规范的常量定义请求方法
    register_rest_route(
        'learn2/v1',
        '/webhook', // 去掉末尾斜杠,语义化路径
        array(
            'methods' => WP_REST_Server::READABLE, // 等价于GET,用常量更规范
            'callback' => [$this, 'handle_webhook'], // 关联正确的回调方法
            'permission_callback' => '__return_true', // 测试用,后续替换为实际权限逻辑
        )
    );
}

// 完整的回调方法
public function handle_webhook(WP_REST_Request $request) {
    // 处理你的业务逻辑,比如获取请求参数
    $params = $request->get_query_params();
    return rest_ensure_response([
        'message' => 'Webhook accessed successfully',
        'received_params' => $params
    ]);
}

按上面的步骤逐一排查,应该就能解决rest_no_route的404问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:51