检查用户是否有 Gravatar [WordPress]

Check if a User Has a Gravatar [WordPress]

感谢Rene Korss几乎帮助解决了这个问题,并且每次都在讨论中回复。

我想查看发表评论的用户是否有头像?如果用户有头像(意味着有 gravatar 帐户)显示 gravatar 头像,否则显示我在其他部分定义的图像。任何帮助将不胜感激。

我目前正在使用这个代码:

if(get_avatar()==1 )
            {
                echo get_avatar($comment,$size='48',$default='<path_to_url>' ); 
            }
        else
            {   ?>
                <img src="<?php bloginfo('template_directory'); ?>/img/admin.jpg" alt=""><?php 
            }   ?>

此代码的输出只是其他部分有效。如果我将条件写为 if(get_avatar()),则仅当部分有效时。

$comment 的值为:

 stdClass Object ( 
 [comment_ID] => 9 
 [comment_post_ID] => 104 
 [comment_author] => Navnish 
 [comment_author_email] => ask@navnishbhardwaj.com
 [comment_author_url] => 
 [comment_author_IP] => 118.146.54.35 
 [comment_date] => 2015-09-23 14:33:11 
 [comment_date_gmt] => 2015-09-23 14:33:11 
 [comment_content] => this is comment by Admin
 [comment_karma] => 0 
 [comment_approved] => 1 
 [comment_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 
 [comment_type] => 
 [comment_parent] => 0 
 [user_id] => 1 
 )

使用此代码时:

<?php 
$avatar = get_avatar( get_the_author_meta( 'ID' ), $size = '48', $default = bloginfo( 'template_directory' ).'/img/admin.jpg' ); 
if( $avatar !== false )
{
echo $avatar; 
} 
?>

得到这样的输出:

输出:

$avatar = get_avatar( $comment->comment_author_email, $size = '48', $default = bloginfo( 'template_directory' ).'/img/admin.jpg' ); 
if( $avatar !== false )
{
    echo $avatar; 
}

是:

get_avatar() 检索提供了用户 ID 或电子邮件地址的用户的头像。如果头像存在,则 returns 为真。

if(get_avatar($comment))
 {
   echo get_avatar($comment,$size='48',$default='<path_to_url>' ); 
 }
 else
 {   ?>
 <img src="<?php bloginfo('template_directory'); ?>/img/admin.jpg" alt=""><?php 
 }  
if(get_avatar('user_id')==1 )
            {
                echo get_avatar($comment,$size='48',$default='<path_to_url>' ); 
            }
        else
            {   ?>
       <img src="<?php bloginfo('template_directory');>/img/admin.jpg" alt=""><?php 
            }   ?>

使用 get_avatar( 'id') 而不是 get_avatar( ) 使用一些 id

试试这个。使用作者电子邮件应该会有所帮助。另外,请注意我没有调用 get_avatar 两次。 else 不需要,因为如果头像不存在,您可以设置要使用的 $default 图片。

$avatar = get_avatar( $comment->comment_author_email, $size = '48', $default = bloginfo( 'template_directory' ).'/img/admin.jpg' ); 
if( $avatar !== false )
{
    echo $avatar; 
}

另一种更通用的方法:当您不想从 gravatar 服务获取默认图像以防头像不存在,但您只想知道它是否可以提供您自己的本地图像case或者做点别的,那么就可以使用Wordpress documentation.

提出的功能
function validate_gravatar($email) {
    // Craft a potential url and test its headers
    $hash = md5(strtolower(trim($email)));
    $uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
    $headers = @get_headers($uri);
    if (!preg_match("|200|", $headers[0])) {
        $has_valid_avatar = FALSE;
    } else {
        $has_valid_avatar = TRUE;
    }
    return $has_valid_avatar;
}

(你要求 gravatar 服务提供指定“404”作为默认值的图像 "image",然后你检查服务器的答案是什么)

这种方法的缺点是您必须为每个化身发出一些额外的 HTTP 请求来检查它,这样会稍微减慢一切。

if (get_avatar_data( $id_or_email )['found_avatar'])

将检查用户是否设置了头像。

get_avatar_data