如何将出现的任何Gravatars替换为本地占位符图像?

时间:2019-02-17 作者:Florian Walther

用户可以将头像作为本地图像文件上传到我的网站上。如果他们没有这样做,它将返回到WordPress默认值(Gravatar)。但我想用本地存储的占位符图像替换任何出现的Gravatar。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好的,所以出现了一些get_avatar() 在您的站点中。如果查看此函数的文档,您将看到:

将默认化身图像的URL作为第三个参数传递args 作为第5个参数和其中一个args 是:

force_default (bool)(可选)是否始终显示默认图像,而不是Gravatar。默认值:false。

和asdefault 您可以使用:

默认图像或默认类型的URL。接受“404”(返回404而不是默认图像)、“retro”(8位)、“monsterid”(怪物)、“wavatar”(卡通脸)、“indenticon”(被子)、“神秘”、“mm”或“mysteryman”(牡蛎人)、“blank”(透明GIF)或“gravatar\\u默认”(gravatar徽标)。默认值:默认值是“avatar\\u Default”选项的值,回退为“神秘”。

但是

如果出现大量get_avatar 或者您不想修改这些事件(例如,其中一些事件来自插件),那么您可以使用过滤器来实现这一点。

一种方法是使用pre_get_avatar 滤器

如果返回任何非null值,则get_avatar 函数将被忽略,您的结果将用作头像。所以你可以用这样的方法来做:

function replace_all_avatars_with_default_one( $html, $id_or_email, $args ) {
    $url = \'<URL TO DEFAULT AVATAR\';
    $class = array();
    return $avatar = sprintf(
        "<img alt=\'%s\' src=\'%s\' class=\'%s\' height=\'%d\' width=\'%d\' %s/>",
        esc_attr( $args[\'alt\'] ),
        esc_url( $url ),
        esc_attr( join( \' \', $class ) ),
        (int) $args[\'height\'],
        (int) $args[\'width\'],
        $args[\'extra_attr\']
    );
}
add_filter( \'pre_get_avatar\', \'replace_all_avatars_with_default_one\', 10, 3 );

SO网友:Trisha

Krzysiek有一个很好的解决方案,但我的做法有点不同。。。因为我还想允许用户上传本地存储的图像,如果他们不上传,则返回到Gravatar(如果他们没有Gravatar设置,则返回默认图像)。

我使用ACF(高级自定义字段)让作者上传图像,因为它可以很容易地将图像上传功能添加到每个用户的配置文件页面,但您可能会使用不同的功能-但是您允许他们上传和存储图像,您需要用户元字段的名称,下面的示例使用元字段名称“author\\u profile\\u picture”。

此外,我相信你已经知道这一点,但为了其他可能会发现这一点并需要帮助的人的利益,Gravatar是通过主题使用WP的“get\\u avatar”功能添加的,所以你所需要做的就是找到主题添加的位置并更改代码。在某些主题中,它调用函数中的代码。php文件或其他包含文件,以便将get\\u avatar与许多主题控制的参数一起使用,但您可以完全删除它,并用新代码替换它,以实现您想要的功能,而不是主题想要的功能-只需注意图像大小,使您的样式看起来仍然不错。

我使用下面示例中的代码查找并显示我的usermeta字段(如果存在),如果没有,则默认为gravatar/default图像。。。。。。这是一种优雅的方式,允许用户选择本地存储的图像或其Gravatar,但如果您确实不想使用Gravatar图像,也可以选择不显示图像。

这是我的代码和注释

    <?php 

    global $user; \\\\ necessary to access ALL user meta fields

    $authorimage = get_the_author_meta(\'author_profile_picture\', $user->ID );

    if ( $authorimage ) { ?>
    <img src="<?php echo $authorimage; ?>" class="authorimg" />       
    <?php
    } else { 
    echo get_avatar( get_the_author_meta( \'user_email\' ) ); \\\\ to display the Gravatar or Default image
      \\\\ OR you can do something different if you DON\'T want Gravatar
    echo \'no author image available\'; \\\\ Lots of options here, you can choose to do whatever if no image has been uploaded
     } ?>

<h4>Meet The Author: <?php the_author();  ?></h4>
<div itemprop="description" class="description">
<p><?php echo get_the_author_meta(\'description\',$user->ID); ?></p>
</div>

相关推荐

Gravatar image url is wrong?

我有一段代码可以拉用户的坟墓:if( $current_user->ID == 0 ) { // Not logged in. echo \'<p><img src=\"\'.get_stylesheet_directory_uri().\'/img/wpb-default-gravatar.png\" alt=\"תמונת פרופיל\"></p>\'; echo \'<p>רוצה למכור?&