web-dev-qa-db-fra.com

Forcer les utilisateurs à afficher les Gravatars par défaut

Est-il possible pour un site WordPress d'afficher l'image Gravatar par défaut de l'utilisateur (de l'ensemble choisi, par exemple Rétro, Identicon, etc.), plutôt que l'avatar téléchargé par l'utilisateur? Comme dans, tous les avatars des utilisateurs à côté des commentaires sont des images "Rétro" générées, qu'ils aient ou non un avatar personnalisé sur Gravatar.

Capture d'écran des paramètres en question:  WordPress Screenshot

Étant donné que ces avatars par défaut sont générés en fonction du courrier électronique de l'utilisateur, je me demandais s'il était toujours possible de les générer ou si Gravatar renvoyait ces avatars générés par défaut plutôt que l'avatar personnalisé de l'utilisateur.

1
user19606

Trouvé, vous pouvez créer l'adresse manuellement pour renvoyer l'image à partir de Gravatar, et passer des paramètres pour forcer les valeurs par défaut et le thème. Cela a été combiné en partie avec la réponse de @ Sudar, ainsi que le code de pluggable.php car la page d'administration récupérera l'ID et non le courrier électronique de $id_or_email;.

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);

Lire la suite:

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

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

0
user19606

Oui c'est possible.

Ajoutez simplement une fonction au hook 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

De nos jours, c'est beaucoup plus facile grâce à get_avatar_data() qui est appelée par 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