WordPress 调用最新注册用户并显示在侧边栏
在 WordPress 中,有时我们需要在侧边栏或其他位置展示最新注册的用户列表,这可以通过创建一个短代码或直接调用函数来实现。下面是一个经过优化和修正的代码示例,它比原始代码更安全、更标准。
创建获取最新注册用户的函数
将以下代码添加到你的主题的 functions.php 文件中,或通过代码片段插件添加。
/**
* 获取最新注册的用户列表
*
* @param int $limit 要显示的用户数量,默认为5。
* @return string 返回包含用户头像和昵称的HTML列表。
*/
function wp_get_recently_registered_users( $limit = 5 ) {
global $wpdb;
// 参数安全检查
$limit = absint( $limit );
if ( $limit <= 0 ) {
$limit = 5;
}
// 准备查询:获取用户昵称、URL和邮箱,按ID降序排列
$query = $wpdb->prepare(
"SELECT user_nicename, user_url, user_email FROM {$wpdb->users} ORDER BY ID DESC LIMIT %d",
$limit
);
$users = $wpdb->get_results( $query );
// 如果没有用户,返回空字符串
if ( empty( $users ) ) {
return '';
}
$output = '';
foreach ( $users as $user ) {
// 获取用户头像,尺寸设为45像素
$avatar = get_avatar( $user->user_email, 45 );
// 构建列表项:如果有个人网站则添加链接,否则只显示文本
if ( ! empty( $user->user_url ) ) {
// 对URL进行转义,防止XSS攻击
$profile_url = esc_url( $user->user_url );
$output .= sprintf(
'- %s%s
',
$avatar,
$profile_url,
esc_html( $user->user_nicename )
);
} else {
$output .= sprintf(
'- %s%s
',
$avatar,
esc_html( $user->user_nicename )
);
}
}
$output .= '
';
return $output;
}
/**
* 注册短代码 [recent_users]
*/
function wp_register_recent_users_shortcode( $atts ) {
// 解析短代码属性,允许用户自定义显示数量
$atts = shortcode_atts(
array(
'limit' => 5,
),
$atts,
'recent_users'
);
return wp_get_recently_registered_users( $atts['limit'] );
}
add_shortcode( 'recent_users', 'wp_register_recent_users_shortcode' );
代码说明与改进
与原始代码相比,此版本进行了以下重要改进:
- 安全性:使用
$wpdb->prepare()进行SQL查询参数化,防止SQL注入。对输出的URL和文本使用esc_url()和esc_html()进行转义。 - 健壮性:添加了参数验证(
absint),确保传入的$limit是正整数。 - 可维护性:函数和短代码命名更具描述性(如
wp_get_recently_registered_users),并添加了详细的文档注释。 - 功能增强:短代码支持
limit属性,允许在调用时动态设置显示数量,例如[recent_users limit="10"]。 - 修正错误:原始代码中链接的HTML拼接存在语法错误(
/'%20.%20$username-%3Euser_url%20.%20'),新版已修正为正确的URL输出。
使用方法
你可以通过以下两种方式调用此功能:
1. 使用短代码
在文章、页面或小工具(支持短代码的文本小工具)中直接插入短代码:
[recent_users]
或指定显示数量:
[recent_users limit="8"]
2. 在主题模板文件中直接调用函数
如果你想在侧边栏(sidebar.php)或其他模板文件中直接输出,可以使用:
<?php echo wp_get_recently_registered_users( 5 ); ?>
或者,如果你使用的是WordPress 5.5+的块编辑器主题,可以在需要的位置通过PHP代码块插件或主题钩子来调用。
自定义样式
输出的HTML包含一个CSS类 recently-registered-users,你可以通过主题的 style.css 文件为其添加样式,例如:
.recently-registered-users {
list-style: none;
padding-left: 0;
margin-left: 0;
}
.recently-registered-users li {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.recently-registered-users .avatar {
border-radius: 50%;
margin-right: 10px;
}
通过以上步骤,你就可以在WordPress网站中安全、灵活地展示最新注册的用户列表了。