web-dev-qa-db-fra.com

Avatars rectangle

J'utilise get_avatar() pour générer des images de mes utilisateurs.

Réf: https://codex.wordpress.org/Function_Reference/get_avatar

Le paramètre optionnel size me permet de spécifier une taille. Cependant, cela fait un avatar carré.

Comment puis-je sortir un avatar qui est un rectangle. Quelque chose comme largeur 300px et hauteur 150px?

1
henrywright

Autant que je sache, la fonction get_avatar () ne permet que des valeurs carrées. Cela ne signifie pas que vous ne pouvez pas utiliser le style pour afficher un avatar rectangulaire. Essentiellement, vous utiliseriez le style pour "raser" 150 pixels de la largeur.

Supposons donc que votre fichier de thème génère un avatar de 300 x 300 pixels pour l'auteur du message en utilisant le code suivant:

<?php echo get_avatar( get_the_author_meta( 'ID' ), 300 ); ?>

Il suffit alors de placer l'image de l'avatar à l'intérieur d'une balise DIV que vous pouvez styler, comme ceci:

<div class="auth-avatar">
<?php echo get_avatar( get_the_author_meta( 'ID' ), 300 ); ?>
</div>

Vous utilisez ensuite CSS pour rogner et centrer l'image:

.auth-avatar {
    width: 300px;
    height: 150px;
    overflow: hidden;
}

.auth-avatar img {
   width: 100%
}

Cela devrait faire l'affaire. Voici un violon avec les résultats:

http://jsfiddle.net/wLg4a/20/

2
unifiedac

Gravatar.com - Service à distance

Le problème (problème.k.a.) est que le redimensionnement n’a pas lieu sur votre serveur. Cela se passe sur le serveur de gravatar:

http(s)://*.gravatar.com

Voir dans le source - en utilisant un argument de requête appelé s. Donc quoi que vous fassiez, Gravatar répondra par une image carrée de 1px à 2048px:

"$Host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";

Gravatar a un API ... qui ne peut pas faire cela - désolé de vous décevoir.

Solutions - Solutions de contournement

La seule solution est donc CSS dans ce cas - MAIS ... vous utilisez des avatars complètement différents avec un filtre:

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

Donc, en théorie (non testé), vous pourriez faire quelque chose comme ce qui suit:

add_filter( 'get_avatar', 'wpse139329ResizedAvatar', 10, 5 );
function wpse139329ResizedAvatar( $avatar, $id_or_email, $size, $default, $alt )
{
    $newAvatar = wp_get_image_editor( $avatar );
    if ( is_wp_error( $newAvatar ) )
        return $avatar;

    $newAvatar->resize( 500, 100, true );
    $info = pathinfo( $avatar );
    $newAvatar->save( $info['filename'].$info['extension'] );
    return $newAvatar;
}

Quoi qu'il en soit, cela devrait fonctionner le long des lignes indiquées ci-dessus.

Désavantages

L'inconvénient sera que ce noyau ne supporte rien d'autre que d'éteindre complètement les Gravatars. La raison peut tout simplement être devinée: WordPress.com appartient au même propriétaire de Gravatar.com (et à plusieurs autres sociétés comme Vaultpress). Ainsi, il vous restera un Gravatar qui sera récupéré à distance (y compris le délai) à partir d’un serveur et qui ne sera pas utilisé du tout.

Les choses ne sont pas si mauvaises ...

En fait, la fonction get_gravatar() est "connectable":

if ( !function_exists( 'get_avatar' ) ) :

Donc, si vous écrasez-le, vous pouvez le remplacer complètement par une méthode d'affichage des avatars différente pour vos utilisateurs. Créez-en un vous-même, prenez un plugin qui le fait, etc.

1
kaiser

Réf.: Images Gravatar , Gravatar ne supporte que les images carrées, même la référence de la fonction get_avatar () , énonce un seul argument.

Cependant, si vous voulez vraiment faire cela, la meilleure option serait avec CSS, je suppose.

0
sven