Skip to content

Instantly share code, notes, and snippets.

@justinph
Created March 19, 2013 16:49
  • Star 45 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
Star You must be signed in to star a gist
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: http://codex.wordpress.org/Using_Gravatars#Checking_for_the_Existence_of_a_Gravatar
/**
* 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 = 'http://www.gravatar.com/avatar/' . $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;
}
}
@artboard-studio
Copy link

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

@sanslan
Copy link

sanslan commented Aug 10, 2016

Thanks.

@AjGabriel
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.

@AjGabriel
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!

@mknee123
Copy link

Yes, THANK YOU!

@kousherAlam
Copy link

wow , it is very useful.

@cstuart
Copy link

cstuart commented May 25, 2018

Legend!!! Thank you!!

@Dibbyo456
Copy link

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.

@tdrdimov
Copy link

Well done, BRAVO!

@Aurorum
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