建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

WordPress 给新注册用户固定获取一个随机头像(WordPress函数:esc_attr()(过滤属性))

GG网络技术分享 2025-03-18 16:13 5


WordPress 给新注册用户固定获取一个随机头像

WordPress 默认对于新注册的用户有一个默认头像,又或者是调用Gravatar,Gravatar加载缓慢这是众所周知的了,如果你既不想调用Gravatar头像,又不想使用默认的单调的头像,有没有什么新的方式呢?有!其实可以采取给新注册的用户提供一个随机头像这种解决方案。

可能有些朋友已经通过WordPress的插件实现了随机头像的功能。OK!我这里给大家介绍一种不需要安装插件的方式,最重要的是这种方式给新WordPress注册用户分配的随机头像是固定的,重新登录和刷新页面都是不会改变的。

言归正传!

WordPress主题目录下新建一个存放头像的目录 /avatars

如上图所示,我们在主题根目录新建用来存放头像的文件夹,命名为 avatars,头像建议使用60~100像素的图片。图片命名 01.jpg,02.jpg,… 99.jpg,支持png或jpg格式。

复制粘贴代码至主题的 function.php 文件中

/**

* WordPress 给新注册用户固定获取一个随机头像

* @Author Jackie

* @Author url https://www.themeke.com

*/

// 获取随机头像路径

function get_avatar_from_dir() {

$dir=get_stylesheet_directory()."/avatars"; // 存放头像的目录

$handle=opendir($dir);

$array_file = array();

$allowExtensions = array('png','jpg'); // 头像文件格式

while (false !== ($file = readdir($handle))) {

if ($file != "." && $file != "..") {

$extension = pathinfo($file,PATHINFO_EXTENSION);

$mainname = preg_replace('/.'.$extension.'/i','',$file);

$lowerExt = strtolower($extension);

if (in_array($lowerExt, $allowExtensions)) {

$avatar_url = get_stylesheet_directory_uri() . '/avatars/'.$mainname.'.'.$lowerExt;

$array_file[] = array(

'avatar' => $avatar_url

);

}

}

}

closedir($handle);

return $array_file;

}

add_filter('pre_get_avatar', 'tk_get_avatar', 10, 3);

function tk_get_avatar($avatar, $id_or_email, $args)

{

global $comment, $current_user;

if (is_numeric($id_or_email)){

$user_id = (int) $id_or_email;

} elseif (is_string($id_or_email) && ($user = get_user_by('email', $id_or_email))){

$user_id = $user->ID;

} elseif (is_object($id_or_email) && !empty($id_or_email->user_id)){

$user_id = (int) $id_or_email->user_id;

}

$u_random_avatar = get_user_meta($user_id ,"random_avatar",true); //用户随机头像字段

$random_avatar_arr = get_avatar_from_dir(); //获取随机头像数组

if (empty($u_random_avatar) && !empty($random_avatar_arr)){ //判断用户是否有随机头像,没有就分配一个

$random_avatar = array_rand($random_avatar_arr, 1);

$avatar_url = $random_avatar_arr[$random_avatar]["avatar"] ; //获取随机头像链接

update_user_meta($user_id, "random_avatar", $avatar_url); //更新用户随机头像字段

$custom_avatar = $u_random_avatar;

}else{

$custom_avatar = $u_random_avatar;

}

$alt = $args['alt'] ? $args['alt'] : get_the_author_meta('nickname', $user_id);

$avatar = $custom_avatar ? $custom_avatar : get_template_directory_uri() . '/images/default-avatar.png'; //设置一个默认头像

$avatar = preg_replace("/^(https:|http:)/", "", $avatar);

$avatar = '<img alt="' . esc_attr($alt) . '" src="' . esc_url($avatar) . '" class="avatar avatar-' . esc_attr($args['size']) . '" height="' . esc_attr($args['size']) . '" width="' . esc_attr($args['size']) . '">';

return $avatar;

}

WordPress函数:esc_attr()(过滤属性)

一般在写 Html 代码的标签属性的时候会是下边的格式:

<input type=\"text\" name=\"rep\" value=\"rep_value\" />

标签:

提交需求或反馈

Demand feedback