Skip to content

Instantly share code, notes, and snippets.

Created March 19, 2013 16:49
Show Gist options
  • Save justinph/5197810 to your computer and use it in GitHub Desktop.
Save justinph/5197810 to your computer and use it in GitHub Desktop.
In wordpress, a better way to check if an author has a gravatar or not. Sometimes you might want to check to see if a gravatar exists and not display any image if there isn't one. Uses the wordpress HTTP and caching apis. A better version of this:
* Utility function to check if a gravatar exists for a given email or id
* @param int|string|object $id_or_email A user ID, email address, or comment object
* @return bool if the gravatar exists or not
function validate_gravatar($id_or_email) {
//id or email code borrowed from wp-includes/pluggable.php
$email = '';
if ( is_numeric($id_or_email) ) {
$id = (int) $id_or_email;
$user = get_userdata($id);
if ( $user )
$email = $user->user_email;
} elseif ( is_object($id_or_email) ) {
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
return false;
if ( !empty($id_or_email->user_id) ) {
$id = (int) $id_or_email->user_id;
$user = get_userdata($id);
if ( $user)
$email = $user->user_email;
} elseif ( !empty($id_or_email->comment_author_email) ) {
$email = $id_or_email->comment_author_email;
} else {
$email = $id_or_email;
$hashkey = md5(strtolower(trim($email)));
$uri = '' . $hashkey . '?d=404';
$data = wp_cache_get($hashkey);
if (false === $data) {
$response = wp_remote_head($uri);
if( is_wp_error($response) ) {
$data = 'not200';
} else {
$data = $response['response']['code'];
wp_cache_set($hashkey, $data, $group = '', $expire = 60*5);
if ($data == '200'){
return true;
} else {
return false;
Copy link

This is a great and useful function, thank you for sharing.

Copy link

sanslan commented Aug 10, 2016


Copy link

Hello! This is a great function however I am encountering a problem because the gravatars are not showing up. Is there any modification that has been made? Sorry I am still a newbie.

Copy link

I using the function to validate gravatar if the email exist or not. Let me know if you want to view my code... Please help. Thanks!

Copy link


Copy link

wow , it is very useful.

Copy link

cstuart commented May 25, 2018

Legend!!! Thank you!!

Copy link

harryqt commented Oct 6, 2018

Why use wp_cache instead of wp_transients ?

By default, the object cache is non-persistent. This means that data stored in the cache resides in memory only and only for the duration of the request. Cached data will not be stored persistently across page loads unless you install a persistent caching plugin.

Copy link

Well done, BRAVO!

Copy link

Aurorum commented Nov 25, 2023

If anyone has stumbled across this and has found it isn't working, you'll want to update http:// to https:// for the Gravatar link, as it now only supports SSL.

See here: Automattic/themes#7515

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment