WordPress 6.2.2中wp_get_current_user()返回空数据问题求助
问题分析与解决方案
你的问题核心在于REST API请求未正确识别用户会话,同时直接返回WP_User对象存在序列化异常风险,权限回调设置也不够严谨。以下是具体解决步骤:
1. 修正权限回调,验证用户登录状态
不要直接返回true,改为验证用户是否已登录,这样未登录时会返回明确的401错误,而非空用户数据:
'permission_callback' => function () { return is_user_logged_in(); }
2. 确保请求携带会话验证信息
如果是通过浏览器直接访问API端点,需确保当前浏览器在同一域名下已登录,且Cookie正常生效。如果是通过前端AJAX请求,必须添加X-WP-Nonce请求头来验证身份:
// 示例AJAX请求代码 fetch('/wp-json/mytheme/v1/current-user', { headers: { 'X-WP-Nonce': '<?php echo wp_create_nonce("wp_rest"); ?>' } })
3. 返回结构化用户数据,避免序列化异常
不要直接返回WP_User对象,手动提取需要的用户字段,确保返回数据格式清晰:
function get_current_user1($request) { $user = wp_get_current_user(); // 双重验证用户登录状态 if ($user->ID === 0) { return new WP_Error('unauthorized', '请先登录', array('status' => 401)); } // 返回指定用户字段 return array( 'ID' => $user->ID, 'username' => $user->user_login, 'email' => $user->user_email, 'display_name' => $user->display_name, 'roles' => $user->roles ); }
4. 可选:使用WordPress内置端点
WordPress已提供现成的当前用户端点/wp/v2/users/me,无需自定义。该端点会自动处理身份验证和数据返回,只要用户已登录即可直接调用。
额外排查点
- 若站点开启了
FORCE_SSL_ADMIN,需确保API请求使用HTTPS协议,否则Cookie无法正常传递。 - 检查
wp-config.php中的COOKIE_DOMAIN配置,确保域名匹配,避免会话无法识别。
内容的提问来源于stack exchange,提问作者Mor Sagmon
相关产品推荐
相关产品推荐

