-
-
Save justinph/5197810 to your computer and use it in GitHub Desktop.
/** | |
* 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; | |
} | |
} |
Thanks.
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.
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!
Yes, THANK YOU!
wow , it is very useful.
Legend!!! Thank you!!
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.
Well done, BRAVO!
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
This is a great and useful function, thank you for sharing.