Products
GG网络技术分享 2025-03-18 16:13 5
WordPress 默认对于新注册的用户有一个默认头像,又或者是调用Gravatar,Gravatar加载缓慢这是众所周知的了,如果你既不想调用Gravatar头像,又不想使用默认的单调的头像,有没有什么新的方式呢?有!其实可以采取给新注册的用户提供一个随机头像这种解决方案。
可能有些朋友已经通过WordPress的插件实现了随机头像的功能。OK!我这里给大家介绍一种不需要安装插件的方式,最重要的是这种方式给新WordPress注册用户分配的随机头像是固定的,重新登录和刷新页面都是不会改变的。
言归正传!
如上图所示,我们在主题根目录新建用来存放头像的文件夹,命名为 avatars,头像建议使用60~100像素的图片。图片命名 01.jpg,02.jpg,… 99.jpg,支持png或jpg格式。
/**
* 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;
}一般在写 Html 代码的标签属性的时候会是下边的格式:
<input type=\"text\" name=\"rep\" value=\"rep_value\" />
Demand feedback