======2023.08.27更新======
使用原有代码时,发现存在一些问题,于是找了一下另外的解决方案,比较好用,这里记录一下:
if ( ! function_exists( 'get_cravatar_url' ) ) { function get_cravatar_url( $url ) { $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( 'um_user_avatar_url_filter', 'get_cravatar_url', 1 ); add_filter( 'bp_gravatar_url', 'get_cravatar_url', 1 ); add_filter( 'get_avatar_url', 'get_cravatar_url', 1 ); } 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 '<a href="https://cravatar.cn" target="_blank">您可以在 Cravatar 修改您的资料图片</a>'; } add_filter( 'user_profile_picture_description', 'set_user_profile_picture_for_cravatar', 1 ); }
使用方法依旧是加入插件或主题的 functions.php 里即可,参考《彻底对令人头疼的Gravatar头像说再见,正式换上国内的Cravatar头像源》。
======2021.04.25原文======
前言
最近两个WordPress站的头像都开始不显示,于是逐一排查问题,B站用的一直是Gravatar的官方接口,偶尔不显示也是正常。
本站之前优化访问速度的时候,使用了WPJAM插件内置的V2ex的接口,正常情况下应该不会存在问题。
突然间想到前两天访问不了V2ex的情况(后来查证发现是域名污染了),一切似乎就解释得通了。
解决
利用SM.MS的Gravatar接口替换默认Gravatar接口
将下面代码添加到当前主题functions.php文件中:
function mytheme_get_avatar( $avatar ) { $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","https://gravatar.loli.net",$avatar ); return $avatar; } add_filter( 'get_avatar', 'mytheme_get_avatar' );
以上代码由脚本之家提供的代码格式化工具格式化:http://tools.jb51.net/code
插曲
正常情况下,添加完上述代码,默认Gravatar接口就会被替换,然后正常显示Gravatar头像。
但刷新之后Gravatar头像还是没有正常显示,于是我开始排查问题。
我发现前端头像的URL还是显示的V2ex域名,也就是说,接口没有正常替换成功。
我隐约记得之前折腾过一次,手动替换的默认Gravatar头像接口,但几番找寻依旧没有结果(猜测可能是代码优先级的问题)。
因为WordPress本身不提供主题文件的批量搜索,于是我打算从服务器将整个主题文件下载到本地,进而找到当时的代码。
正当我想要下载主题文件时,我突然想起之前是通过WPJAM插件修改的接口。
于是我找到了WPJAM管理后台,想要自定义修改Gravatar头像的接口,但现实又让我傻了眼:Gravatar加速只有两个选项,一是默认,二是V2ex(估计作者也没想过,有一天V2ex会被Q,2333)。
因为不熟悉插件目录,没法找到这个功能写在了哪,所以还是下载了主题文件。
这个功能在WPJAM的目录是:wpjam-basic\public\wpjam-hooks.php
将352行的
$gravatar_url = 'http://cdn.v2ex.com/gravatar/';
改为
$gravatar_url = 'https://gravatar.loli.net/';
即可。
然后在WPJAM的后台选择优化设置-加速优化-Gravatar加速-使用v2ex镜像加速服务
如果你介意使用v2ex镜像加速服务的提示,可以在wpjam-basic\public\wpjam-basic.php进行修改。
看最新版的代码,好像新版已经支持自定义镜像加速服务,所以大家也可以直接安装最新版。
因为老版够用,我暂时不会安装最新版。
其他
接口
https://fdn.geekzu.org/avatar/
https://sdn.geekzu.org/avatar/
https://dn-qiniu-avatar.qbox.me/avatar/
PS:Gravatar官方的调用方式是www.gravatar.com/avatar/+邮箱Md5,使用上述接口,只需将www.gravatar.com/avatar/替换为第三方接口加上对应邮箱的Md5即可。
WordPress 官方中文文档
https://codex.wordpress.org/zh-cn:Main_Page