前引
在本博客使用的过程中突然注意到了头像不加载的问题,然后博客搭建时并没有出现这个问题,此时也以为是重新搭建的过程中遗忘了配置切换国内镜像cavatar,就在网上找了些教程,结果不尽人意,都没有解决这个办法。
那么就手动进行排查
过程
首先登录cravatar发现没有问题。

测试下md5查看,加载也没有问题。


既然不是cravatar的问题,就只剩下博客本身的问题。
查看网络流量分析是否成功切换cravatar镜像。

很好,成功切换到镜像,但是md5格式不对,如图:

这里是64位,而md5的长度是32位,所以头像加载失败,显而易见是有关邮箱名的加密算法出现了错误。而根据cmd5加密结果中可以判断出使用的算法是sha256算法。

经过了诸多(可能插件及主题)针对头像及邮箱名处理函数的排查,均无收获,最后在搜索引擎中查看到了以下内容:

在24年的年初,gravatar更换了加密算法为sha256,而wordpress也在6.8进行了更新。
故:问题找到,而在前面cravatar检测成功的是使用md5算法,所以可以猜测cravatar并没有做出对应的兼容。
那么对于头像处理部分的代码也相对应更改为强制使用md5算法即可。
如下,成功解决:

解决代码
在主题文件编译器 ->functions.php添加以下代码:
// 正确的 Cravatar 标准实现(只认 MD5,不认 SHA256)
function get_cravatar_url( $url ) {
// 1. 先提取邮箱,重新生成 MD5(这是核心修复!)
if ( preg_match('/avatar\/([a-f0-9]{32,64})/', $url, $matches) ) {
$hash = $matches[1];
$hash_length = strlen($hash);
// 关键修复:如果检测到 SHA256(64位),必须转回 MD5
if ( $hash_length === 64 ) {
// 这里需要一个能从 hash/email 反查邮箱的机制
// 最简单的方案:交给另一个钩子去处理(见下方)
// 或者直接使用过滤器的第二个参数 $id_or_email
}
}
// 2. 域名替换(切换国内镜像)
$sources = array(
'www.gravatar.com', '0.gravatar.com', '1.gravatar.com',
'2.gravatar.com', 'secure.gravatar.com', 'cn.gravatar.com',
'gravatar.com'
);
return str_replace( $sources, 'cravatar.cn', $url );
}
add_filter( 'get_avatar_url', 'get_cravatar_url', 1, 2 ); // 注意增加参数数量
// 核心修复:强制将 SHA256 转为 MD5(Cravatar 官方标准)
add_filter( 'get_avatar_url', function( $url, $id_or_email ) {
// 只处理我们替换为 cravatar.cn 的 URL
if ( strpos( $url, 'cravatar.cn' ) === false ) {
return $url;
}
// 获取邮箱
$email = null;
if ( is_numeric( $id_or_email ) ) {
$user = get_userdata( $id_or_email );
$email = $user->user_email ?? '';
} elseif ( is_object( $id_or_email ) && isset( $id_or_email->comment_author_email ) ) {
$email = $id_or_email->comment_author_email;
} elseif ( is_string( $id_or_email ) && is_email( $id_or_email ) ) {
$email = $id_or_email;
}
// 如果能获取到邮箱,强制使用 MD5
if ( ! empty( $email ) ) {
$md5 = md5( strtolower( trim( $email ) ) );
// 用正则替换掉 URL 中的 hash 部分
$url = preg_replace( '/avatar\/[a-f0-9]{32,64}/', 'avatar/' . $md5, $url );
}
return $url;
}, 999, 2 );
/* 下面为原代码部分,于此供参考上述代码存放位置 */
if ( ! function_exists( 'set_defaults_for_cravatar' ) ) {
/**
* 替换 WordPress 讨论设置中的默认头像
*/ function set_defaults_for_cravatar( $avatar_defaults ) {
$avatar_defaults['gravatar_default'] = 'Cravatar 标志';
return $avatar_defaults;
}
add_filter( 'avatar_defaults', 'set_defaults_for_cravatar', 1 );
}
if ( ! function_exists( 'set_user_profile_picture_for_cravatar' ) ) {
/**
* 替换个人资料卡中的头像上传地址
*/ function set_user_profile_picture_for_cravatar() {
return '您可以在 Cravatar 修改您的资料图片';
}
add_filter( 'user_profile_picture_description', 'set_user_profile_picture_for_cravatar', 1 );
}
测试评论1
A really good blog and me back again.
Thank you, and I hope the blog content can help you.
挺不错的样子嘛!
谢谢夸奖,希望能帮助到你。
每天都在战争,希望2026和平.
May you always find beauty and joy in the simple things of life
看不懂但大受震撼
Promote our brand and get paid—enroll in our affiliate program!
Very good i like it