前言
在开发多用户 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() 函数,你可以安全、便捷地获取登录用户的详细资料和角色信息。遵循上述最佳实践,能确保你的代码安全、兼容且易于维护。