J'ai essayé d'utiliser Identicon de Gravator comme image de secours, s'il n'y a pas d'image pour un utilisateur donné dans un dossier d'images prédéfini.
considérons le scénario suivant;
Email de l'utilisateur: [email protected]
une image est chargée dans wp-content/images/users/
avec le nom de fichier 0eb178cec364c022a189c3814e5f7483.jpg
(). Le nom du fichier est généré avec md5("[email protected]"."customkey");
.
Si un fichier image est disponible en tant que wp-content/images/users/0eb178cec364c022a189c3814e5f7483.jpg
, je dois afficher cette image en tant qu'avatar de l'utilisateur. Si aucune image de ce type n'existe, Gravatar sera affiché.
Jusqu'à présent, j'ai essayé d'utiliser Gravatar comme arrière-plan, mais une icône d'image brisée apparaît si une image personnalisée n'est pas disponible.
Je recherche une solution sans plug-in, car tous les plug-ins utilisent le dossier de téléchargement par défaut et créent de nombreuses vignettes, même à cette fin, ce qui est totalement inutile. Je ne pouvais trouver aucun plugin qui coche tout les cases. Toute aide est appréciée.
Vous pouvez utiliser le filtre get_avatar_url
(voir les arguments passés ici dans le code source ) pour modifier l'URL de l'avatar, puis simplement utiliser get_avatar()
avec le courrier électronique de l'utilisateur dans le thème que vous avez l'habitude.
add_filter('get_avatar_url', 'wpse_avatar_or_gravatar', 10, 3);
function wpse_avatar_or_gravatar($url, $id_or_email, $args) {
// was id passed via $id_or_email
if ($id_or_email == intval($id_or_email)) {
$userdata = get_userdata($id_or_email);
$email = $userdata->user_email;
}
// was email passed via $id_or_email
else {
$email = $id_or_email;
}
$path = sprintf('%s/images/users/%s.jpg',
WP_CONTENT_DIR,
md5($email . "customkey")
);
// image exists, return url
if (file_exists($path)) {
$url = sprintf('%s/images/users/%s.jpg',
WP_CONTENT_URL,
md5($email . "customkey")
);
}
else {
$url = "https://0.gravatar.com/avatar/" . md5($email . 'customkey') . "?s=64&d=identicon&f=y&r=g";
}
// image does not exist, return default avatar
return $url;
}