WordPress用户的Gravata图像未显示。改为加载默认设置

时间:2016-08-14 作者:Sosthenes Kwame Boame

我正在尝试显示用户gravatars 在此页上http://gepc.themelot.com/survey-comparison/433747624/293281083/ 但页面始终显示默认\'mystery man\' 阿凡达我检查了page元素,它为gravatar链接返回具有相同哈希值的相同URL。

这是我的代码:

<?php if (!empty($matched_answers)) { ?>
    <h1><?php $user = get_user_by( \'user_login\', $matched_answers[0][\'user\'] ); echo get_avatar( $user->ID , 256 ).\' \'.$matched_answers[0][\'user\'].\' - \'.round($matched_answers[0][\'percentage\'], 2).\' &#37;\'; ?></h1>
    <table border="0" width="100%">
        <thead>
        <th>Name</th>
        <th>Percentage</th>
        </thead>
        <tbody>
            <?php
            foreach ($matched_answers as $value) {
                $user = get_user_by( \'user_login\', $value[\'user\'] );
                $user_email = $user->user_email;
                $url = \'http://gravatar.com/avatar/\' . md5( $user_email );
                $url = add_query_arg( array(
                \'s\' => 48,
                \'d\' => \'mm\',
                ), $url );
                $gravatar_url = esc_url_raw( $url );
                echo \'<tr>\';
                echo \'<td>\'.\'<img src=\'.$gravatar_url.\' />\'.\'<td>\';
                echo \'<td>\'.$value[\'user\'] . \'</td>\';
                echo \'<td class="votepercent">\' . round($value[\'percentage\'], 2) . \' &#37;</td>\';
                echo \'</tr>\';
            }
            ?>
        </tbody>
    </table>  
<?php }
?>
如何返回用户的实际gravatar图像?我的代码有什么问题?

提前谢谢。

3 个回复
最合适的回答,由SO网友:Sosthenes Kwame Boame 整理而成

我找到了我的具体案例的解决方案。我最终使用了get_user_by(\'login\', $value) 这是我的代码:

    <?php
    foreach ($matched_answers as $value) {
    $user           = get_user_by(\'login\', $value[\'user\']);
    $gravatar_url = get_avatar( $user->user_email, 60);        
    echo \'<tr style="margin-bottom:10px;">\';
    echo \'<td width="33.33333%">\' . $gravatar_url . \'</td>\';
    echo \'<td width="33.33333%" class="votepercent">\' . round($value[\'percentage\'], 2) . \' &#37; of issues</td>\';
    echo \'<td width="33.33333%" class="tbtn"><a class="btn btn-primary">View Responses</a></td>\';
    echo \'</tr>\';
    }?>

SO网友:jgraup

并非该页面上的所有图像都有问题。例如:http://gravatar.com/avatar/619d8e38359241a952a1f9b67f1f36cd?s=60&d=mm

其余图像无法显示,因为无法识别您编码的电子邮件gravatar. 显示默认图像是因为您指定要使用mm 当无法为哈希找到图像时。他们有一些规范电子邮件的技巧,如trimstrtolower 以获得更好的哈希命中率。

Creating a hash:

修剪电子邮件地址中的前导和尾随空格,强制所有字符使用小写,对最后的字符串进行哈希运算[email protected]);

  $user = get_user_by( \'user_login\', $value[\'user\'] );
  $user_email = $user->user_email;

  $url = \'http://gravatar.com/avatar/\' . md5(strtolower(trim($user_email)));
  $url = add_query_arg( array(
    \'s\' => 80,
    \'d\' => \'mm\',
  ), $url );

  $gravatar_url = esc_url_raw( $url );

Gravatar API - Default Image

更改默认图像mmhttps%3A%2F%2Fplacekitten.com%2F256%2F256 通过指定d 参数

http://gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=250&d=https%3A%2F%2Fplacekitten.com%2F256%2F256

404:如果没有与电子邮件哈希关联的图像,请不要加载任何图像,而是返回HTTP 404(找不到文件)响应

  • mm: (神秘人)一个人的简单卡通轮廓(不随电子邮件散列而变化)
  • identicon: 基于电子邮件哈希的几何模式monsterid: 生成的具有不同颜色、面孔等的“怪物”wavatar: 生成的具有不同特征和背景的面retro: 出色生成的8位拱廊风格像素化面blank: 一个透明的PNG图像(为了演示,在下面的HTML中添加了边框)

请记住,并不是每封电子邮件都有gravatar,这就是默认图像存在的原因。

SO网友:swissspidy

乍一看,它看起来或多或少还行。你有没有想过这些用户根本没有与他们的电子邮件关联的Gravatar?

一般来说,应该尽可能使用内置的WordPress函数,以减少错误风险,并使代码更经得起未来的考验。对于Gravatar,有get_avatar(). 对于您的用例,如下所示:

$user_id = 0;
$user = get_user_by( \'user_login\', $value[\'user\'] );
if ( $user ) {
  $user_id = $user->ID;
}
echo \'<tr>\';
echo \'<td>\' . get_avatar( $user_id, 48, \'mm\' ) .\'<td>\';
如您所见,您可以将用户ID(或电子邮件地址)传递给功能,指定大小和默认化身。函数返回完整的<img> 标记头像,使代码更具可读性。

如果仍然没有显示单独的Gravatar,则用户实际上没有Gravatar。就这么简单。

相关推荐

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>רוצה למכור?&