Skip to content

Instantly share code, notes, and snippets.

@justinph
Created March 19, 2013 16:49
Show Gist options
  • Select an option

  • Save justinph/5197810 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown

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

@sanslan

sanslan commented Aug 10, 2016

Copy link
Copy Markdown

Thanks.

@AjGabriel

Copy link
Copy Markdown

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
Copy Markdown

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
Copy Markdown

Yes, THANK YOU!

@kousherAlam

Copy link
Copy Markdown

wow , it is very useful.

@cstuart

cstuart commented May 25, 2018

Copy link
Copy Markdown

Legend!!! Thank you!!

@harryqt

harryqt commented Oct 6, 2018

Copy link
Copy Markdown

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
Copy Markdown

Well done, BRAVO!

@Aurorum

Aurorum commented Nov 25, 2023

Copy link
Copy Markdown

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