如何将WordPress REST API自定义端点设为公开?含命令行登录疑问
WordPress REST API自定义端点公开访问及命令行认证问题解决
一、让自定义端点公开可访问的解决方法
你已经在路由中设置了'permission_callback' => '__return_true',但匿名用户仍返回401“REST API disabled”,说明存在全局层面的访问限制,可按以下步骤排查修复:
检查全局REST API禁用设置
打开wp-config.php,确认是否存在define('DISABLE_WP_REST', true);,如果有,将其删除或改为false。(注:你提到根端点/wp-json可访问,此设置大概率不存在,但仍需确认)排查插件/主题冲突
- 暂时禁用所有第三方插件,仅保留你的自定义插件,测试匿名访问是否恢复正常。
- 切换到WordPress默认主题(如Twenty Twenty-Three),排除主题代码拦截REST API的可能。
覆盖全局权限拦截钩子
如果存在其他代码通过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,可按以下方式调整:
修正curl命令格式
确保应用密码的空格正确保留,建议用单引号包裹用户名和密码组合,避免转义问题:curl --user '用户名:xxxx xxxx xxxx xxxx xxxx xxxx' https://example.com/wordpress/wp-json/hello-world/v1/phrase改用请求头传递认证信息
若服务器禁用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确认应用密码的权限与启用条件
- 确保你的WordPress版本≥5.6,且站点使用HTTPS(你已满足)。
- 应用密码要求用户账户启用双重认证(2FA),若未启用,需先在用户个人设置中开启2FA后再生成应用密码。
内容的提问来源于stack exchange,提问作者Faguss
相关产品推荐
相关产品推荐

