JeuxOnLineForumsPlusConnectés : 411 (sites) | 790 (forums)Créer un compte
Forums divers
Le Laboratoire
Répondre
Partager Outils Rechercher
Avatar de Coin-coin le Canapin
Coin-coin le Canapin [FED]
Alpha & Oméga
 
Avatar de Coin-coin le Canapin
 
Question

[Wordpress] question sur la fonction get_avatar(). Oui, c'est très spécifique ://

Salut.
Alors voilà : sur mon WP j'ai des utilisateurs avec des gravatars, et d'autres avec des avatars stockés localement sur mon WP (dans /upoads/…), dont les adresses email ne sont pas associées à des gravatars.

get_avatar() retourne un tag <img> avec un attribut src qui mène vers le bon avatar : si l'utilisateur a un gravatar src mène vers une url gravatar, si l'utilisateur a un avatar local, l'attribut src mène vers l'adresse locale.
C'est super !

get_avatar_url() lui en revanche retourne systématiquement une adresse gravatar. Même pour les utilisateurs qui ont un avatar local : ça retourne une adresse gravatar qui affiche une icône de profil gravatar par défaut :
.

Alors j'ai regardé dans la fonction get_avatar(), notamment ce passage :
Code PHP:
$avatar sprintf(
    
"<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>",
    
esc_attr$args['alt'] ),
    
esc_url$url ),
    
esc_attr"$url2x 2x" ),
    
esc_attrjoin' '$class ) ),
    (int) 
$args['height'],
    (int) 
$args['width'],
    
$args['extra_attr']
);

return 
apply_filters'get_avatar'$avatar$id_or_email$args['size'], $args['default'], $args['alt'], $args ); 
Si je fais un echo sur $url, j'obtiens TOUJOURS une url gravatar.
Mais le apply_filters semble être magique puisque grâce à ça la fonction retourne une image avec la bonne url, gravatar OU local.

Et donc je comprends rien. Pourquoi ? Comment ?

Et surtout : comment est-ce que je peux simplement demander à WP de me retourner l'avatar d'un utilisateur, qu'il soit local ou gravatar? C'est quasiment ce que fait get_avatar(), à ceci près qu'il me retourne un tag image et non pas une url. Et qu'à aucun moment dans la fonction je n'ai trouvé d'url locale à coups de var_dump.

Si quelqu'un a une idée, je suis très preneur.
__________________
Lien direct vers le message - Vieux
Avatar de Lael
Lael
Alpha & Oméga
 
Avatar de Lael
 
Je dirais que ton $args doit forcément contenir l'info sur ton avatar local et distant.

Et il semble récupérer cette info de get_avatar_data()
Lien direct vers le message - Vieux
Avatar de Yssuka
Yssuka
Alpha & Oméga
 
Avatar de Yssuka
 
De base il n'y a aucune fonction attachée au filtre "get_avatar", donc tu dois avoir un plugin qui en ajoute une et qui va faire le taff.

Cherche pour un " add_filter( 'get_avatar' " avec les différentes variantes avec espaces/quote/simple quote dans ton dossier /plugins puis la fonction associée. Ça te donnera une idée de comment ça se gère.

Sinon le plus simple est de garder la fonction "get_avatar()" est d'extraire l'URL de ton tag IMG via un preg_match()
Lien direct vers le message - Vieux
Avatar de Coin-coin le Canapin
Coin-coin le Canapin [FED]
Alpha & Oméga
 
Avatar de Coin-coin le Canapin
 
Haha j'ai pensé au fait qu'un plugin ou un thème ajoutait un filtre quelque part et puis j'ai oublié.
Il s'agissait de buddypress, merci pour vos réponses, vous êtes meilleur que stackoverflow et discord réunis.

La solution d'extraire l'url de mon tag img m'intéresse mais je ne vois pas comment l'appliquer, tu peux m'en dire plus ?

edit : y a une fonction native de buddypress permettant de retourner l'url d'un avatar (d'ailleurs c'est genre de ce côté que y a un filtre) :

Suffit d'exécuter
Code:
bp_core_fetch_avatar ( array
(  'item_id' => get_the_author_meta('ID'), 'html'   => FALSE )
);
Et hop
(html à true retourne un tag <img>)

Mais ton truc avec preg match m'intéresse. Le truc chiant là c'est que get_avatar() dès que tu l'exécutes, il affiche l'image en html, donc je vois pas comment le modifier avant.

re edit : en fait, le meilleur truc à faire serait de créer un filter sur get_avatar pour remplacer le <img> par un <div> (et faire sauter pas mal d'attributs au passage), mais j'y arrive pô.

J'ai tenté ça en ajoutant un <hr> (pour voir si ça marche) :
Code:
add_filter( 'get_avatar' , 'my_custom_avatar' , 11 , 6 );
function my_custom_avatar( $avatar, $id_or_email, $size, $default, $alt, $args ) {
    $avatar = "<hr><img alt='{$alt}' src='{$args['url']}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    return $avatar;
}
En fonction de la priorité soit ça marche et ça fout un avatar gravatar (autrement dit, ça passe pas par le filtre de buddypress), soit ça ne fait rien du tout. :/

Dernière modification par Coin-coin le Canapin ; 09/03/2017 à 22h21.
Lien direct vers le message - Vieux
Avatar de Yssuka
Yssuka
Alpha & Oméga
 
Avatar de Yssuka
 
Pour extraite l'URL,

Code:
$avatar = get_avatar(); // Avec les arguments que tu veux
preg_match("/src='(.*?)'/i", $avatar, $matches);
A partir de là tu auras ton URL dans $matches[1] donc tu peux en faire ce que tu veux.

Sinon en un peu plus complet tu as ça sur stackoverflow
Lien direct vers le message - Vieux
Avatar de Coin-coin le Canapin
Coin-coin le Canapin [FED]
Alpha & Oméga
 
Avatar de Coin-coin le Canapin
 
Ben en fait, dès qu'on écrit get_avatar() dans une page, ça affiche un tag image, puisque get_avatar retourne un sprintf.
Donc je vois pas comment je peux extraire une info sans afficher le tag.

En plus utiliser direct get_avatar() va pas être le plus pratique pour moi puisqu'en réalité cette fonction est appelée à l'intérieur de :
Code:
bbp_reply_author_link( array( 'type' => 'avatar', 'size' => 50 ) )
C'est pour cela qu'il faudrait que j'arrive à filtrer get_avatar pour remplacer le <img> par un <div> et mettre l'url en background-image.

Mais j'y arrive pas : soit get_avatar est filtré par mon propre filtre mais pas celui de bbpress, soit l'inverse (en fonction de la priorité de mon filtre). :/
Lien direct vers le message - Vieux
Avatar de Yssuka
Yssuka
Alpha & Oméga
 
Avatar de Yssuka
 
Ca ressemblerait à un truc comme ça

Code:
<?php
$avatar = get_avatar($author_id);
preg_match("/src='(.*?)'/i", $avatar, $matches);
?>

<div style="background-image: url(<?php echo $matches[1]; ?>);">
.....
.....
.....
</div>
En gros,

1) Tu récupères ton <img> normalement via get_avatar()
2) Tu utilises un preg_match() pour ne récupérer que l'URL dans le SRC
3) Tu ECHO l'URL dans une DIV

Bon tu auras sans doute du CSS à ajouter sur ta DIV, mais c'est une autre question.
Lien direct vers le message - Vieux
Avatar de Coin-coin le Canapin
Coin-coin le Canapin [FED]
Alpha & Oméga
 
Avatar de Coin-coin le Canapin
 
Problème iz, comme j'ai dit, "Ben en fait, dès qu'on écrit get_avatar() dans une page, ça affiche un tag image, puisque get_avatar retourne un sprintf."
Lien direct vers le message - Vieux
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +2. Il est actuellement 01h15.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite