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

如何将WordPress REST API自定义端点设为公开?含命令行登录疑问

WordPress REST API自定义端点公开访问及命令行认证问题解决

一、让自定义端点公开可访问的解决方法

你已经在路由中设置了'permission_callback' => '__return_true',但匿名用户仍返回401“REST API disabled”,说明存在全局层面的访问限制,可按以下步骤排查修复:

  1. 检查全局REST API禁用设置
    打开wp-config.php,确认是否存在define('DISABLE_WP_REST', true);,如果有,将其删除或改为false。(注:你提到根端点/wp-json可访问,此设置大概率不存在,但仍需确认)

  2. 排查插件/主题冲突

    • 暂时禁用所有第三方插件,仅保留你的自定义插件,测试匿名访问是否恢复正常。
    • 切换到WordPress默认主题(如Twenty Twenty-Three),排除主题代码拦截REST API的可能。
  3. 覆盖全局权限拦截钩子
    如果存在其他代码通过rest_authentication_errors钩子限制匿名访问,可在你的插件中添加以下代码,确保自定义端点被放行:

    add_filter('rest_authentication_errors', function($error) {
        $current_route = wp_rest_server()->get_current_request()?->get_route();
        // 匹配你的自定义端点路由
        if ($current_route && strpos($current_route, 'hello-world/v1/phrase') !== false) {
            return null; // 取消错误拦截,允许访问
        }
        return $error;
    });
    

    将这段代码添加到你的hello.php插件中,与路由注册代码放在一起即可。

二、命令行curl访问的403问题修复

使用应用密码访问时返回403,可按以下方式调整:

  1. 修正curl命令格式
    确保应用密码的空格正确保留,建议用单引号包裹用户名和密码组合,避免转义问题:

    curl --user '用户名:xxxx xxxx xxxx xxxx xxxx xxxx' https://example.com/wordpress/wp-json/hello-world/v1/phrase
    
  2. 改用请求头传递认证信息
    若服务器禁用Basic Auth方式,可将认证信息编码后放在Authorization请求头中:

    # 将"用户名:应用密码"替换为实际内容
    curl -H "Authorization: Basic $(echo -n '用户名:xxxx xxxx xxxx xxxx xxxx xxxx' | base64)" https://example.com/wordpress/wp-json/hello-world/v1/phrase
    
  3. 确认应用密码的权限与启用条件

    • 确保你的WordPress版本≥5.6,且站点使用HTTPS(你已满足)。
    • 应用密码要求用户账户启用双重认证(2FA),若未启用,需先在用户个人设置中开启2FA后再生成应用密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:52:50