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

如何移除WordPress JSON API特定端点并限制请求方法?

完整WordPress REST API定制方案

我来给你一套落地的实现方案,完全匹配你提出的三个定制需求,所有代码都可以直接放到主题的functions.php文件里,或者封装成独立插件使用:

1. 限制单个文章路由仅允许GET请求

针对/wp/v2/posts/{id}路由,我们可以通过rest_api_init钩子,在API初始化后修改该路由的允许请求方法:

add_action('rest_api_init', function () {
    // 获取已注册的REST路由集合
    $routes = rest_get_server()->get_routes();
    
    // 定位单个文章的路由规则
    $target_route = '/wp/v2/posts/(?P<id>[\d]+)';
    if (isset($routes[$target_route])) {
        // 仅保留GET方法(WP_REST_Server::READABLE对应GET+HEAD,也可直接写array('GET'))
        $routes[$target_route][0]['methods'] = WP_REST_Server::READABLE;
        // 更新路由配置
        rest_get_server()->set_routes($routes);
    }
}, 11); // 优先级设为11,确保在默认路由注册完成后执行

2. 完全移除指定端点

要删除users/*、settings这类端点,直接使用unregister_rest_route函数即可,同样挂载到rest_api_init钩子:

add_action('rest_api_init', function () {
    // 移除整个users端点(自动覆盖所有子路由如/users/{id}、/users/me)
    unregister_rest_route('wp/v2', '/users');
    // 移除单个settings端点
    unregister_rest_route('wp/v2', '/settings');
    
    // 如果还有其他需要移除的端点,可继续添加:
    // unregister_rest_route('wp/v2', '/media/(?P<id>[\d]+)/edit');
}, 11);

3. 移除端点内的指定请求方法

如果需要保留某个端点,但删除其中的特定方法(比如禁止文章列表的POST、PUT请求),可以通过修改路由的methods数组实现:

add_action('rest_api_init', function () {
    $routes = rest_get_server()->get_routes();
    
    // 示例1:移除文章列表端点的POST、PUT、DELETE方法,仅保留GET
    $posts_list_route = '/wp/v2/posts';
    if (isset($routes[$posts_list_route])) {
        $routes[$posts_list_route][0]['methods'] = array('GET');
        rest_get_server()->set_routes($routes);
    }
    
    // 示例2:移除单个评论端点的DELETE方法
    $comments_route = '/wp/v2/comments/(?P<id>[\d]+)';
    if (isset($routes[$comments_route])) {
        unset($routes[$comments_route][0]['methods']['DELETE']);
        rest_get_server()->set_routes($routes);
    }
}, 11);

验证方案有效性

完成代码添加后,可以通过以下方式验证效果:

  • 尝试用POST请求访问/wp/v2/posts/1,应该返回405 Method Not Allowed错误
  • 访问/wp/v2/users或/wp/v2/settings,应该返回404 Not Found错误
  • 检查目标端点的响应头Allow,确认只包含你允许的请求方法

额外提示

  • 如果你需要更细粒度的权限控制,可以结合rest_pre_dispatch钩子,在请求执行前进行自定义权限校验
  • 所有修改建议放在子主题的functions.php中,避免主题更新时丢失代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:28:10