web-dev-qa-db-ja.com

ユーザーにデフォルトのGravatarsの表示を強制する

ユーザーがアバターをアップロードするのではなく、WordPressサイトにユーザーのデフォルトのGravatar画像(選択されたセット、例えばRetro、Identiconなど)を表示することは可能ですか?同様に、コメントの横にあるすべてのユーザーアバターは、Gravatarにカスタムアバターがあるかどうかにかかわらず、生成された「レトロ」な画像になります。

問題の設定のスクリーンショット: WordPress Screenshot

これらのデフォルトのアバターはユーザーの電子メールに基づいて生成されるので、それらを生成すること、またはユーザーのカスタムアバターではなくGravatarにこれらのデフォルトの生成されたアバターを返させることが可能かどうか疑問に思いました。

1
user19606

Gravatarから画像を返すためにアドレスを手動で作成し、デフォルトとテーマを強制するためのパラメータを渡すことができます。これを@ Sudarの回答、および管理ページとしてのpluggable.phpからのコードと組み合わせることで、$id_or_emailからの電子メールではなくIDが取得されるため、管理ページに正しいアバターが表示されるようにチェックを追加する必要があります。

function custom_get_avatar($avatar, $id_or_email, $size, $default, $alt) {

    if ( is_admin() ) {

        $email = '';
        if ( is_numeric($id_or_email) ) {
            $id = (int) $id_or_email;
            $user = get_userdata($id);
            if ( $user )
                $email = $user->user_email;
        } elseif ( is_object($id_or_email) ) {
            // No avatar for pingbacks or trackbacks
            $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
            if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
                return false;

            if ( !empty($id_or_email->user_id) ) {
                $id = (int) $id_or_email->user_id;
                $user = get_userdata($id);
                if ( $user)
                    $email = $user->user_email;
            } elseif ( !empty($id_or_email->comment_author_email) ) {
                $email = $id_or_email->comment_author_email;
            }
        } else {
            $email = $id_or_email;
        }

        $md5address = md5( strtolower( trim( $email ) ) );

        return '<img width="'.$size.'" height="'.$size.'" src="http://www.gravatar.com/avatar/' . $md5address . '?d=retro&f=y" />';

    }

    else {

        $md5address = md5( strtolower( trim( $id_or_email ) ) );

        return '<img width="'.$size.'" height="'.$size.'" src="http://www.gravatar.com/avatar/' . $md5address . '?d=retro&f=y" />';

    }

}

add_filter('get_avatar', 'custom_get_avatar', 10, 5);

続きを読む:

http://en.gravatar.com/site/implement/hash/

http://en.gravatar.com/site/implement/images/

0
user19606

ええ、それは可能です。

get_avatarフックに関数を追加するだけです

function change_avatar($avatar, $id_or_email, $size, $default, $alt) {
    return 'url_to_your_retro_image';
}

add_filter('get_avatar', 'change_avatar', 10, 5);
1
Sudar

今日では、get_avatar_data()によって呼び出されている get_avatar() のおかげで、はるかに簡単になりました。

function wpse75380_force_default_avatar( $args ) {
  $args['force_default'] = true;
  return $args;
}

add_filter( 'get_avatar_data', 'wpse75380_force_default_avatar' );
0
swissspidy