gravatar头像不显示
近日,Gravatar网站CND(内容分发网络)未知原因出现问题,国内无法显示以0.gravatar.com和1.gravatar.com为前缀的头像,而以www.gravatar.com为前缀的却可以,如果你启用了头像缓存插件或主题具备头像缓存功能,空间主机又在国外,不会受到影响,而国内主机则无法实现头像缓存,这一问题严重拖慢了页面打开速度.
Gravatar部分服务器在国内访问困难,同样受到困扰的还包括WordPress存储静态文件的s.wordpress.org缓存服务器,以及jQuery的code.jquery.com等。
可能有人会问,为什么有的站点的Gravatar头像地址是以www.gravatar.com开头,有的却是以0.gravatar.com和1.gravatar.com为前缀呢?WordPress 从2.5版开始集成了Gravatar头像功能,随着使用Gravatar头像的用户越来越多,为了减轻服务器负担,Gravatar网站采用CDN(内容分发网络),就近从Gravatar网站服务器加载头像,提高页面打开速度。正因为如此从WordPress 3.0开始,改进源代码适应CDN,提高头像加载速度。默认情况下还在使用老版本WordPress的用户,由于没有启用CDN,所以前缀是www.gravatar.com,直接从主站加载头像,不会受到影响。
下面就说说如何修改WordPress源文件,直接从 http://www.gravatar.com 加载Gravatar头像。
Gravatar头像不显示解决方法一
打开WordPress程序wp-includes目录中的pluggable.php
在第1649行找到:
$host = sprintf("http://%d.gravatar.com", (hexdec($email_hash{0}) % 2 ));
修改为:
$host = sprintf( "http://www.gravatar.com", ( hexdec($email_hash{0}) % 2 ));
在第1651行找到:
$host = 'http://0.gravatar.com';
修改为:
$host = 'http://www.gravatar.com';
完成保存后覆盖原文件即可
Gravatar头像不显示解决方法二
使用插件:Gravatar Fixed
插件内容如下
<?php
/*
Plugin Name: Gravatar 头像修正
Plugin URI: http://wpceo.com/gravatar-fixed/
Description: 该插件用于修正Gravatar服务器无法正常访问的情况,并且可以自定义Gravatar服务器地址
Author: WPCEO
Author URI: http://wpceo.com/
Version: 1.0
*/
add_action('admin_menu','register_gravatar_admin_menu');
function register_gravatar_admin_menu(){
add_options_page('Gravatar头像', 'Gravatar头像', 'manage_options', 'gravatar_fixed', 'gravatar_fixed_options');
add_action( 'admin_init', 'register_gravatar_settings' );
}
function register_gravatar_settings() {
register_setting( 'gravatar-settings', 'gravatar_server_1' );
register_setting( 'gravatar-settings', 'gravatar_server_s' );
}
function gravatar_fixed_options(){
?>
<div>
<h2>Gravatar 头像修正</h2>
<form method="post" action="options.php">
<?php settings_fields( 'gravatar-settings' ); ?>
<table>
<tr valign="top">
<th scope="row">Gravatar 服务器</th>
<td><input type="text" name="gravatar_server_1" value="<?php echo get_option('gravatar_server_1'); ?>" /></td>
</tr>
<tr valign="top">
<th scope="row">Gravatar SSL 服务器</th>
<td><input type="text" name="gravatar_server_s" value="<?php echo get_option('gravatar_server_s'); ?>" /></td>
</tr>
</table>
<p>
<input type="submit" value="<?php _e('Save Changes') ?>" />
</p>
</form>
</div>
<?php
}
register_activation_hook(__FILE__,'gravatar_fixed_install');
function gravatar_fixed_install() {
if(!get_option('gravatar_server_1')){
update_option('gravatar_server_1','http://www.gravatar.com');
}
if(!get_option('gravatar_server_s')){
update_option('gravatar_server_s','https://secure.gravatar.com');
}
}
// Add settings link on plugin page
function register_plugin_settings_link($links) {
$settings_link = '<a href="options-general.php?page=gravatar_fixed">设置</a>';
array_unshift($links, $settings_link);
return $links;
}
$plugin = plugin_basename(__FILE__);
add_filter("plugin_action_links_{$plugin}", 'register_plugin_settings_link' );
if ( !function_exists( 'get_avatar' ) ) :
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
if ( ! get_option('show_avatars') )
return false;
if ( false === $alt)
$safe_alt = '';
else
$safe_alt = esc_attr( $alt );
if ( !is_numeric($size) )
$size = '96';
$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;
}
if ( empty($default) ) {
$avatar_default = get_option('avatar_default');
if ( empty($avatar_default) )
$default = 'mystery';
else
$default = $avatar_default;
}
if ( !empty($email) )
$email_hash = md5( strtolower( $email ) );
if ( is_ssl() ) {
$host = get_option('gravatar_server_s') ? get_option('gravatar_server_s') : 'https://secure.gravatar.com';
} else {
$host = get_option('gravatar_server_1') ? get_option('gravatar_server_1') : 'http://www.gravatar.com';
}
if ( 'mystery' == $default )
$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
elseif ( 'blank' == $default )
$default = includes_url('images/blank.gif');
elseif ( !empty($email) && 'gravatar_default' == $default )
$default = '';
elseif ( 'gravatar_default' == $default )
$default = "$host/avatar/s={$size}";
elseif ( empty($email) )
$default = "$host/avatar/?d=$default&s={$size}";
elseif ( strpos($default, 'http://') === 0 )
$default = add_query_arg( 's', $size, $default );
if ( !empty($email) ) {
$out = "$host/avatar/";
$out .= $email_hash;
$out .= '?s='.$size;
$out .= '&d=' . urlencode( $default );
$rating = get_option('avatar_rating');
if ( !empty( $rating ) )
$out .= "&r={$rating}";
$avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
} else {
$avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
}
return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}
endif;







嗯,貌似www的也打不开了的说
不用Gravatar就不会有这样的问题了
学习了,收藏。
进来很多文章都介绍了如何解决Gravatar不显示图片的问题,暂时先收藏下有时间也折腾下。
你用的是国外1G主机吗?
小张的,北京主机。ip地址你ping一下就知道了。最好找小张问下。
分享的不错 又学了招