如何使用特定的电子邮件地址更改用户头像

时间:2020-07-27 作者:UserUser-name

我的代码无效:-(

(电子邮件0、1、2、3…59中的数字-这些是秒)

add_filter(\'get_avatar\', \'my_get_avatar\', 10, 5);
 
function my_get_avatar($avatar, $id_or_email, $size, $default, $alt) {
    $mail = $id_or_email->comment_author_email;
    $email_list  = array( \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\', \'[email protected]\');
    if (array_search($mail, $email_list) == true ) {
        $img = "http://website.com/wp-content/anonimus-avatar.png";
        $avatar = "<img src=\'".$img ."\' alt=\'".$alt."\' height=\'".$size."\' width=\'".$size."\' />";
    }
    return $avatar;
}
对不起我的英语

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

有两件事:

$id_or_email 可以是整数(用户ID)、字符串(Gravatar MD5哈希或用户电子邮件)或对象(例如WP_User 实例),所以您不能简单地$mail = $id_or_email->comment_author_email;.

您列表中的电子邮件地址均以anonimus_<number>@anonimus.com, 因此,不用定义长数组,只需使用正则表达式(RegEx)。

(Update) 还有一件事:

而不是get_avatar 过滤器/挂钩,您可能只需要使用pre_get_avatar_data hook 从你的my_get_avatar() 功能,您只需更改化身URL。

这样(即使用上述挂钩),您的回调也可以与get_avatar_url() 而且不仅仅是get_avatar().

因此,只需移除add_filter(\'get_avatar\', \'my_get_avatar\', 10, 5); 从代码中删除(并删除my_get_avatar() 函数),然后改用以下命令:

add_filter( \'pre_get_avatar_data\', \'my_pre_get_avatar_data\', 10, 2 );
function my_pre_get_avatar_data( $args, $id_or_email ) {
    // First, get the user\'s ID or email for unregistered comment authors.
    if ( is_numeric( $id_or_email ) ) {
        $user = get_user_by( \'id\', $id_or_email );
    } elseif ( $id_or_email instanceof WP_Comment ) {
        $email = $id_or_email->comment_author_email;
        $user = get_user_by( \'id\', $id_or_email->user_id );
    } elseif ( $id_or_email instanceof WP_Post ) {
        $user = get_user_by( \'id\', $id_or_email->post_author );
    } elseif ( $id_or_email instanceof WP_User ) {
        $user = get_user_by( \'id\', $id_or_email->ID );
    } else {
        $user = get_user_by( \'email\', $id_or_email );
    }

    // For registered users, get the email in the database.
    if ( empty( $email ) && $user && ! is_wp_error( $user ) ) {
        $email = $user->user_email;
    }

    // Then check the user\'s email and use the custom avatar, if applicable.
    if ( ! empty( $email ) && preg_match( \'/^anonimus_\\d+@anonimus\\.com$/\', $email ) ) {
        $args[\'url\'] = \'http://example.com/wp-content/anonimus-avatar.png\';
    }

    return $args;
}
但是如果你想用get_avatar hook,那么请让我知道或者检查一下这个答案的修改。

针对您的评论:

请帮助将此应用于AMP页面。滤器ampforwp_get_comments_gravatar

你真的应该在plugin support forums, 但是这次让我们做一个例外,您可以尝试以下操作,它覆盖ampforwp_get_comments_gravatar() 函数-是的,有一个同名的钩子,但我认为它不会起作用(因为their code 没有通过$comment 变量到挂钩回调)。

if ( ! function_exists( \'ampforwp_get_comments_gravatar\' ) ) :
    function ampforwp_get_comments_gravatar( $comment ) {
        global $redux_builder_amp;

        if ( ! empty( $redux_builder_amp[\'ampforwp-display-avatar\'] ) ) {
            return get_avatar( $comment );
        }

        return \'\';
    }
endif;
那就是untested, 但它应该会起作用。如果您需要进一步的定制帮助,请询问/发布其他问题。

相关推荐

Wrong gravatar showing up?

我有一个安装,加载了错误的gravatar,我不知道为什么。最令人困惑的是,它是在前端模板和管理中完成的。这是一个屏幕盖:列出的用户和电子邮件为not 我的,但脸是。知道怎么回事吗?即使是在Gravatar、Jetpack和链接账户等之后,我也觉得自己与这些图像的实际制作方式有点脱节,但这是第一次让我如此痛苦。