无法通过邮箱获取WooCommerce客户,API调用返回404路由错误
解决WordPress REST API "rest_no_route" 404错误(通过邮箱获取用户场景)
你遇到的这个问题挺典型的——其他REST接口(比如/products/、/orders/)都正常,唯独通过邮箱获取用户的请求返回404路由不存在,而且已经开启了Pretty Links。我给你整理几个实用的排查和解决方向:
1. 先确认接口路径和请求方法是不是错了
WordPress默认的REST API里,没有直接通过邮箱作为路由参数的端点,正确的做法是用search参数配合GET请求:
- 正确的接口格式:
GET /wp-json/wp/v2/users?search=你的邮箱地址
错误提示里的
No route was found matching the URL and request method,大概率是你请求的路径或者HTTP方法和系统注册的路由不匹配,比如用了POST方法,或者写了个不存在的路径比如/wp-json/wp/v2/users/by-email/xxx@xx.com
2. 排查插件/主题的路由拦截问题
有些安全插件(比如Wordfence)或者自定义主题的代码,可能会偷偷修改或限制REST API的路由:
- 先临时禁用所有第三方插件,再测试接口,如果正常了,就逐个启用插件找冲突的那个
- 切换到WordPress默认主题(比如Twenty Twenty-Four),看看是不是主题的自定义代码搞的鬼
3. 刷新Pretty Links的重写规则
虽然你开了Pretty Links,但有时候配置没生效,需要手动刷新:
- 进后台「设置」→「固定链接」,随便选个别的格式(比如「文章名」),点「保存更改」,再切回原来的设置重新保存一遍,这会强制刷新服务器的重写规则
- 检查服务器配置:
- Apache服务器看
.htaccess文件有没有默认的WordPress重写代码(就是那段BEGIN WordPress到END WordPress的代码,没的话手动加上) - Nginx服务器要确保配置里有
try_files $uri $uri/ /index.php?$args;这条规则,不然Pretty Links没法生效
- Apache服务器看
4. 确认身份验证和权限是否到位
有时候权限不足会被伪装成路由不存在的错误:
- 如果你是前端调用,得确保已经通过JWT、Cookie或者OAuth完成了身份验证
- 后端调用的话,要用有
list_users权限的用户(管理员、编辑默认有,订阅者没有)
5. 自己注册自定义路由(如果默认接口不够用)
要是你想要一个更直观的接口,比如/wp-json/custom/v1/users/by-email/xxx@xx.com,可以在主题的functions.php或者自定义插件里加这段代码:
add_action('rest_api_init', function () { // 注册自定义路由,支持邮箱格式的参数 register_rest_route('custom/v1', '/users/by-email/(?P<email>[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})', [ 'methods' => 'GET', 'callback' => 'get_user_by_email_rest', // 权限验证:只有能查看用户的角色才能调用 'permission_callback' => function () { return current_user_can('list_users'); } ]); }); // 处理请求的回调函数 function get_user_by_email_rest($request) { $email = $request->get_param('email'); $user = get_user_by('email', $email); if (!$user) { return new WP_Error('no_user_found', '找不到对应用户', ['status' => 404]); } return rest_ensure_response($user->data); }
注册完就能用GET /wp-json/custom/v1/users/by-email/user@example.com来获取用户信息了。
内容的提问来源于stack exchange,提问作者Falan Abdulla
相关产品推荐
相关产品推荐

