WordPress固定链接为Plain时,创建可调用自定义REST API端点的方案
Plain固定链接下自定义REST API端点404的解决办法
问题根源
用Plain固定链接时,WordPress靠rest_route参数解析API路由,但你的自定义端点注册细节没适配这种模式,导致路由匹配失败出现404。
修复后的完整代码
直接替换你原来的代码,调整后就能在Plain模式下正常工作:
function create_custom_endpoint() { register_rest_route( 'wp/v2', 'custom-ep', // 去掉路由开头的斜杠,适配Plain模式解析逻辑 array( 'methods' => WP_REST_Server::READABLE, // 用官方常量替代字符串,更稳妥 'callback' => 'get_response', 'permission_callback' => '__return_true', // 公开访问就用这个,要权限的话换成is_user_logged_in之类的 ) ); } function get_response() { // 这里改成你需要的用户元数据返回逻辑 $current_user = wp_get_current_user(); if ($current_user->ID === 0) { return new WP_Error('not_logged_in', '用户未登录', array('status' => 401)); } // 获取并整理用户元数据 $user_meta = get_user_meta($current_user->ID); foreach ($user_meta as $key => $value) { if (is_array($value) && count($value) === 1) { $user_meta[$key] = $value[0]; } } return rest_ensure_response($user_meta); } add_action('rest_api_init', 'create_custom_endpoint', 10);
关键调整说明
- 路由格式修正:把
/custom-ep改成custom-ep,避免Plain模式下路由解析时的斜杠冲突,这是解决404的核心。 - 规范常量使用:用
WP_REST_Server::READABLE代替'GET',符合WordPress开发规范,减少出错概率。 - 权限控制:加了
permission_callback字段,确保端点安全——公开访问用__return_true,需要登录就换成'is_user_logged_in'。 - 标准响应格式:用
rest_ensure_response()包装返回数据,同时处理未登录场景返回标准错误,符合REST API规范。
测试调用
部署代码后,用这个URL访问(替换成你的域名):
domain-name.com/?rest_route=/wp/v2/custom-ep
如果要指定用户ID(需权限允许),可以加参数:
domain-name.com/?rest_route=/wp/v2/custom-ep&user_id=123
(要获取这个参数的话,把回调函数改成function get_response($request) { $user_id = $request->get_param('user_id'); ... })
额外排查点
如果还是404,检查这几点:
- 代码有没有语法错误,确保放在主题
functions.php或自定义插件里。 - 清空网站缓存(如果用了缓存插件)。
- 检查安全插件(比如Wordfence)是否拦截了请求,把自定义端点加入白名单。
内容的提问来源于stack exchange,提问作者thebaby
相关产品推荐
相关产品推荐

