web-dev-qa-db-fra.com

Réglage de différentes largeurs et hauteurs pour gravatar

J'ai essayé de définir une largeur et une hauteur différentes à l'aide de la fonction get_avatar. Je dois définir l'avatar de l'auteur en single.php à la taille 60x40.

Alors disons que le gravatar ressemble à ceci:

enter image description here

lorsqu'il est défini sur 60x40, il ressemble à ceci (redimensionné et recadré):

enter image description here

Cependant, get_avatar par défaut ne semble pas autoriser des valeurs différentes pour la largeur et la hauteur, car

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

aboutirait simplement à un gravatar de taille 60x60.

Je ne sais pas si c'est une bonne façon de faire cela, mais j'ai essayé d'ajouter ceci à functions.php, en facilitant le redimensionneur d'images TimThumb (j'ai renommé le timthumb.php en display.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;
}

mais cela (semble évidemment) ne fonctionne pas.

Y'a-t-il une quelconque façon de réussir cela?

3
deathlock

Selon les informations fournies par @Rarst, apparemment, Gravatar n'accepte qu'une valeur pour la taille. C'est vraiment dommage. Cependant, j'ai réussi à contourner cela en facilitant timthumb.php et une fonction que j'ai trouvée à partir d'ici: Comment obtenir l'URL de gravatar seul

Je ne suis pas sûr que ce soit la meilleure façon de le faire (cela a l'air malpropre), cependant cela fonctionne pour moi pour créer une taille de 60x40 px. Cela ne semble pas bien fonctionner quand j'ai essayé avec d'autres tailles, cependant. Pas certain de pourquoi.

Eh bien, voici.

D'abord, j'ajoute gravatar.com dans la liste des sites autorisés dans timthumb.php (j'ai renommé le fichier en display.php). La liste est sous le $ALLOWED_SITES.

Puis dans functions.php je mets ceci (remarque que je renomme le timthumb.php en 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' />";
}

Puis dans single.php (où j'affiche le gravatar), j'ai mis ceci:

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

Malheureusement, pour le moment, le service Gravatar lui-même accepte uniquement un nombre unique pour la taille } et ne sert que des images carrées.

Vous devez donc le réaliser avec CSS ou télécharger, modifier et mettre en cache les images.

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

Donc, vous pouvez filtrer la sortie:

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