web-dev-qa-db-ja.com

グラバーターに異なる幅と高さを設定する

私はget_avatar関数を使って異なる幅と高さを設定しようとしています。 single.phpの作者のアバターを60x40のサイズに設定する必要があります。

それでは、グラバターが次のようになっているとしましょう。

enter image description here

60×40に設定すると、次のようになります(サイズ変更および切り取り)。

enter image description here

ただし、デフォルトのget_avatarでは、幅と高さに異なる値を使用できないようです。

<?php echo get_avatar( $comment, '60' ); ?>

単に60x60サイズのグラバターになるでしょう。

これがこれを行うのに適した方法かどうかはわかりませんが、TimThumb画像リサイズを容易にすることによってこれをfunctions.phpに追加してみました(私はtimthumb.phpdisplay.phpに改名しました)。

add_filter('get_avatar','change_avatar_url');
function change_avatar_url($urel) {
    $urel = str_replace("src='", "src='". bloginfo( 'template_directory' ) ."/script/display.php?src=", $urel);
    $urel = str_replace("' class", "&w=60&h=40&zc=1' class", $urel);
    return $urel;
}

しかし、それは(明らかに思われるように)機能しません。

これを達成する方法はありますか?

3
deathlock

@Rarstから通知されているように、現在Gravatarはsizeに1つの値しか受け入れないようです。本当に残念です。しかし、私はtimthumb.phpとここで見つけた関数を容易にすることによってこれを回避することに成功しました: 単独でgravatarのURLを取得する方法

これがこれを行うのが最善の方法であるかどうかわからない(それが厄介に見えます)、しかしこれは60x40 pxサイズを作成するために私には働きます。ただし、他のサイズで試したときにはうまくいかないようです。理由がわからない。

さて、ここに行きます。

最初にgravatar.comの許可サイトのリストにtimthumb.phpを追加します(ファイルの名前をdisplay.phpに変更しました)。リストは$ALLOWED_SITESの下にあります。

それでfunctions.phpにこれを入れます(timthumb.phpの名前をdisplay.phpに変更したことに注意してください)。

// Get the gravatar URL
// source: https://wordpress.stackexchange.com/questions/46904/how-to-get-gravatar-url-alone
function get_gravatar_url( $email ) {
    $hash = md5( strtolower( trim ( $email ) ) );
    return 'http://gravatar.com/avatar/' . $hash;
}

// Function to display the custom-sized gravatar
function custom_gravatar_timthumb($width, $height, $class) {
    $custom = get_template_directory_uri() . "/script/display.php?src=". get_gravatar_url(get_the_author_meta('email')) ."w=". $width ."&h=". $height ."&zc=1&a=c";
    echo "<img src='" . $custom . "' class='". $class ."' alt='avatar' />";
}

それからsingle.php(ここで私はグラバターを表示します)にこれを入れます:

<?php
custom_gravatar_timthumb(60, 40, "author-avatar avatar photo");
?>
1
deathlock

残念ながら、現時点ではGravatarサービス自体は サイズについて単一の数字しか受け付けていません および正方形の画像のみを提供しています。

だからあなたはCSSでそれを達成するか、画像をダウンロード、修正、そしてキャッシュしなければなりません。

2
Rarst
apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);

だからあなたは出力をフィルタリングすることができます:

function wpse69318_avatar_sizes( $avatar, $id_or_email, $size, $default, $alt )
{
    if ( is_single() )
        return preg_replace( '/width\=\"[0-9]{1,3}\"/i', 'width="40px"', $avatar );

    // return default for other pages
    return $avatar
}
add_filter( 'get_avatar', 'wpse69318_avatar_sizes', 10, 5 );
0
kaiser