Gravatar加速:WordPress头像不显示如何解决

发布于 2021-04-25  2.82k 次阅读


本文于 2023年8月27日 10:35 更新,注意查看最新内容

======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

参考

《替换Gravatar头像默认服务器》

《分享几个国内的Gravatar头像接口》

《分享几个亲测能用的Gravatar CDN》


这短短的一生,我们最终都会失去。