[WordPress]替换Gravatar为国内的Cravatar方案

WordPress默认使用的头像是Gravatar,这是一个全球通用的头像方案,通过一个邮箱地址即可在任何支持Gravatar的网站显示同一个头像,但是,国内基于某种原因,是无法加载这个网站的头像的。

虽然有一些CDN解决方案,如:

  • gravatar.loli.net
  • gravatar.loli.top
  • avatar.sourcegcdn.com
  • gravatar.ews1.com
  • ......

但是,有时候还是会遇到各种问题,比如CDN挂了,或者缓存不同步等...

通过反复折腾,我终于找到个(自认为)最佳解决方案,那就是使用国内的Cravatar项目进行替换。

Cravatar支持在用户未设置Cravatar头像及Gravatar头像时自动匹配QQ头像(仅限使用QQ数字邮箱的用户),其带来的效果是:经过三级匹配(Cravatar头像->Gravatar头像->QQ头像)后,大约70%的访客都会得到准确的头像。也就是说使用Cravatar的话,如果你没有Gravatar头像,Cravatar可以默认输出你的QQ头像。

具体配置

只需要在主题function.php模板文件合适位置(任意一个非其他函数内的空闲位置)加入以下代码:

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 );
}

版权声明:
作者:小鱼
链接:https://afish.org/index.php/2023/10/22/gravatar2cravatar/
来源:小鱼的blog
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>