有两件事:
在$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, 但它应该会起作用。如果您需要进一步的定制帮助,请询问/发布其他问题。