用上传的图片替换Gravtal吗?

时间:2015-11-23 作者:N00b

我通过以下方式添加了上载个人资料图片的功能THIS guide.

我找不到关于WP挂钩的在线指南或任何文档。。How to replace Gravatar profile pictures (in comment section) with custom uploaded images?

我不想强迫我的用户注册Gravatar,以便在我的网站上更改他们的个人资料图片。

4 个回复
最合适的回答,由SO网友:PHP Team 整理而成

如果您设置了自定义或上载的个人资料图片,并且需要在前端查看,则可以使用以下功能。

<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?> 
如果您必须将gravatar更改为自定义配置文件图片,您可以参考以下链接:http://www.wpbeginner.com/wp-tutorials/how-to-change-the-default-gravatar-on-wordpress/

SO网友:cybmeta

你需要的钩子是get_avatar filter. 它返回表示用户化身的图像HTML元素。

add_filter( \'get_avatar\', \'cyb_get_avatar\', 10, 5 );
function cyb_get_avatar( $avatar = \'\', $id_or_email, $size = 96, $default = \'\', $alt = \'\' ) {

    // Replace $avatar with your own image element, for example
    // $avatar = "<img alt=\'$alt\' src=\'your_new_avatar_url\' class=\'avatar avatar-{$size} photo\' height=\'{$size}\' width=\'{$size}\' />"

    return $avatar;

}
请注意,使用此过滤器,您仍然可以让用户使用gravatar。你可以检查用户是否已将头像上传到你的网站,然后使用它,如果你没有恢复正常$avatar, 如果用户有一个,它将来自gravatar。(如果您添加了用于存储用户头像的代码,我可以给出确切的工作代码):

add_filter( \'get_avatar\', \'cyb_get_avatar\', 10, 5 );
function cyb_get_avatar( $avatar = \'\', $id_or_email, $size = 96, $default = \'\', $alt = \'\' ) {

    if( "user_has_uploaded_a_local_avatar" ) {
       // Replace $avatar with your own image element, for example
       // $avatar = "<img alt=\'$alt\' src=\'your_new_avatar_url\' class=\'avatar avatar-{$size} photo\' height=\'{$size}\' width=\'{$size}\' />"
    }

    // if user didn\'t upload a local avatar,
    // normal avatar will be used, which can be from gravatar
    return $avatar;

}

SO网友:JPollock

假设用户已将其化身保存为附件的ID,则将其存储在用户meta中作为字段field_with_custom_avatar_id, 如果保存了值,则可以执行此操作以显示该附件:

add_filter( \'get_avatar\', \'slug_get_avatar\', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

    //If is email, try and find user ID
    if( ! is_numeric( $id_or_email ) && is_email( $id_or_email ) ){
        $user  =  get_user_by( \'email\', $id_or_email );
        if( $user ){
            $id_or_email = $user->ID;
        }
    }

    //if not user ID, return
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Find ID of attachment saved user meta
    $saved = get_user_meta( $id_or_email, \'field_with_custom_avatar_id\', true );
    if( 0 < absint( $saved ) ) {
        //return saved image
        return wp_get_attachment_image( $saved, [ $size, $size ], false, [\'alt\' => $alt] );
    }

    //return normal
    return $avatar;

}
或者,如果它保存为图像的URL,则在用户元字段中field_with_custom_avatar -

add_filter( \'get_avatar\', \'slug_get_avatar\', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

    //If is email, try and find user ID
    if( ! is_numeric( $id_or_email ) && is_email( $id_or_email ) ){
        $user  =  get_user_by( \'email\', $id_or_email );
        if( $user ){
            $id_or_email = $user->ID;
        }
    }

    //if not user ID, return
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Find URL of saved avatar in user meta
    $saved = get_user_meta( $id_or_email, \'field_with_custom_avatar\', true );
    //check if it is a URL
    if( filter_var( $saved, FILTER_VALIDATE_URL ) ) {
        //return saved image
        return sprintf( \'<img src="%" alt="%" />\', esc_url( $saved ), esc_attr( $alt ) );
    }

    //return normal
    return $avatar;

}

SO网友:atonus

这是一个“我也是”的评论,但有一个解决方案:)

所以当我启用注释部分时,我从is_email($id_or_email).

这里是错误

strlen() expects parameter 1 to be string, object given in /home/my_theme/public_html/wp-includes/formatting.php on line 2891

发生错误,原因$id_or_email 实际上包含一个对象而不是字符串。

我通过从对象获取电子邮件字符串找到了一种解决方法$id_or_email->comment_author_email

所以我改变了$id_or_email$id_or_email->comment_author_email 现在我得到了评论中正确的头像图片,没有错误。

相关推荐

Add gravatar to author list

我使用此代码在侧栏中列出网站上的所有作者。它可以工作,除了我还需要把他们的Gravatar图像拉进去。它在主页上循环工作<?php echo get_avatar( get_the_author_email(), \'80\' ); ?> 但我有没有办法把它也添加到这个列表中?而且我想不出使用此代码排除“Admin”帐户的方法,这可能吗?非常感谢。<?php $order = \'user_nicename\'; $user_ids = $wpdb->ge