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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:43