web-dev-qa-db-fra.com

Utilisez Gravatar comme image de secours si aucune image locale n'est trouvée.

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.

1
Sid

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;
    }
2
kero