博客 / WordPress/ WordPress 开发指南:如何获取当前登录用户的角色与资料信息

WordPress 开发指南:如何获取当前登录用户的角色与资料信息

WordPress 开发指南:如何获取当前登录用户的角色与资料信息

前言

在开发多用户 WordPress 主题或插件时,经常需要根据当前登录用户的角色或资料信息来定制界面、控制权限或展示个性化内容。本文将介绍如何安全、正确地获取这些信息,并提供现代化的代码示例。

获取当前用户的角色

用户角色是 WordPress 权限系统的核心。以下是一个更健壮、兼容性更好的函数,用于获取当前登录用户的主要角色。

/**
 * 获取当前登录用户的主要角色。
 *
 * @return string|bool 返回用户角色名称(如 'administrator'),如果用户未登录则返回 false。
 */
function wpdocs_get_current_user_role() {
    if ( is_user_logged_in() ) {
        $user = wp_get_current_user();
        // $user->roles 是一个数组,通常第一个元素是用户的主要角色
        $roles = (array) $user->roles;
        return ! empty( $roles ) ? $roles[0] : false;
    } else {
        return false;
    }
}

使用方法

将上述代码添加到你的主题的 functions.php 文件中,然后在模板文件的适当位置调用它:

<?php
$user_role = wpdocs_get_current_user_role();
if ( $user_role ) {
    echo '当前用户角色:' . esc_html( $user_role );
} else {
    echo '用户未登录或角色信息不可用。';
}
?>

获取当前用户的资料信息

WordPress 提供了 wp_get_current_user() 函数来安全地获取当前用户对象。以下是如何获取常用用户资料字段的示例。

<?php
// 确保用户已登录
if ( is_user_logged_in() ) {
    $current_user = wp_get_current_user();
    // 输出用户信息,注意使用转义函数确保安全
    echo '用户 ID:' . (int) $current_user->ID . "<br>";
    echo '登录名:' . esc_html( $current_user->user_login ) . "<br>";
    echo '邮箱:' . esc_html( $current_user->user_email ) . "<br>";
    echo '名字:' . esc_html( $current_user->user_firstname ) . "<br>";
    echo '姓氏:' . esc_html( $current_user->user_lastname ) . "<br>";
    echo '显示名称:' . esc_html( $current_user->display_name ) . "<br>";
    echo '昵称:' . esc_html( $current_user->nickname ) . "<br>";
    // 获取用户头像
    echo get_avatar( $current_user->ID, 96 );
} else {
    echo '用户未登录。';
}
?>

重要说明与最佳实践

1. 安全性

在将用户数据输出到页面时,务必使用转义函数(如 esc_html(), esc_attr()),以防止跨站脚本(XSS)攻击。对于整数类型的 ID,可以使用 (int) 进行强制类型转换。

2. 检查登录状态

在尝试获取用户信息前,应始终使用 is_user_logged_in() 函数检查用户是否已登录,避免对未登录用户调用相关函数可能产生的问题。

3. 避免使用全局变量 $current_user

原文中直接使用 global $current_user;get_currentuserinfo(); 的方式已过时。在 WordPress 4.5 及更高版本中,推荐使用 wp_get_current_user() 函数,它内部会处理全局变量的设置,代码更清晰、更安全。

总结

通过 wp_get_current_user()is_user_logged_in() 函数,你可以安全、便捷地获取登录用户的详细资料和角色信息。遵循上述最佳实践,能确保你的代码安全、兼容且易于维护。

发表评论

您的邮箱不会公开。必填项已用 * 标注。