首页 > 网站 > 建站经验 > 正文

为wordpress添加本地头像功能代替Gravatar

2024-04-25 20:39:13
字体:
来源:转载
供稿:网友

目前wordpress网站几乎都是使用Gravatar全球通头像来关联用户头像的,但是由于Gravatar的服务器是在国外,国内经常由于某些XXX原因而连接不上,今天就来教大家使用代码将Gravatar头像半本地化,那么什么是半本地化呢?也就是通过用户的邮箱判断用户是否拥有Gravatar头像,如果拥有则使用Gravatar头像,当用户拥有本地头像且拥有Gravatar头像时,则优先使用本地头像。

<?php

class Simple_Local_Avatars {

private $user_id_being_edited;

public function __construct() {

add_filter( 'get_avatar', array( $this, 'get_avatar' ), 10, 5 );

add_action( 'admin_init', array( $this, 'admin_init' ) );

add_action( 'show_user_profile', array( $this, 'edit_user_profile' ) );

add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) );

add_action( 'personal_options_update', array( $this, 'edit_user_profile_update' ) );

add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) );

add_filter( 'avatar_defaults', array( $this, 'avatar_defaults' ) );

}

public function get_avatar( $avatar = '', $id_or_email, $size = 96, $default = '', $alt = false ) {

if ( is_numeric($id_or_email) )

$user_id = (int) $id_or_email;

elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ) ) )

$user_id = $user->ID;

elseif ( is_object( $id_or_email ) && ! emptyempty( $id_or_email->user_id ) )

$user_id = (int) $id_or_email->user_id;

if ( emptyempty( $user_id ) )

return $avatar;

$local_avatars = get_user_meta( $user_id, 'simple_local_avatar', true );

if ( emptyempty( $local_avatars ) || emptyempty( $local_avatars['full'] ) )

return $avatar;

$size = (int) $size;

if ( emptyempty( $alt ) )

$alt = get_the_author_meta( 'display_name', $user_id );

// generate a new size

if ( emptyempty( $local_avatars[$size] ) ) {

$upload_path = wp_upload_dir();

$avatar_full_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $local_avatars['full'] );

$image_sized = image_resize( $avatar_full_path, $size, $size, true );

// deal with original being >= to original image (or lack of sizing ability)

$local_avatars[$size] = is_wp_error($image_sized) ? $local_avatars[$size] = $local_avatars['full'] : str_replace( $upload_path['basedir'], $upload_path['baseurl'], $image_sized );

// save updated avatar sizes

update_user_meta( $user_id, 'simple_local_avatar', $local_avatars );

} elseif ( substr( $local_avatars[$size], 0, 4 ) != 'http' ) {

$local_avatars[$size] = home_url( $local_avatars[$size] );

}

$author_class = is_author( $user_id ) ? ' current-author' : '' ;

$avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . $local_avatars[$size] . "' class='avatar avatar-{$size}{$author_class} photo' height='{$size}' width='{$size}' />";

return apply_filters( 'simple_local_avatar', $avatar );

}

public function admin_init() {

//load_plugin_textdomain( 'simple-local-avatars', false, dirname( plugin_basename( __FILE__ ) ) . '/localization/' );

register_setting( 'discussion', 'simple_local_avatars_caps', array( $this, 'sanitize_options' ) );

add_settings_field( 'simple-local-avatars-caps', __('Local Avatar Permissions','simple-local-avatars'), array( $this, 'avatar_settings_field' ), 'discussion', 'avatars' );

}

public function sanitize_options( $input ) {

$new_input['simple_local_avatars_caps'] = emptyempty( $input['simple_local_avatars_caps'] ) ? 0 : 1;

return $new_input;

}

public function avatar_settings_field( $args ) {

$options = get_option('simple_local_avatars_caps');

echo '

<label for="simple_local_avatars_caps">

<input type="checkbox" name="simple_local_avatars_caps" id="simple_local_avatars_caps" value="1" ' . @checked( $options['simple_local_avatars_caps'], 1, false ) . ' />

' . __('仅具有头像上传权限的用户具有设置本地头像权限(作者及更高等级角色)。','simple-local-avatars') . '

</label>

';

}

public function edit_user_profile( $profileuser ) {

?>

<h3><?php _e( '头像','simple-local-avatars' ); ?></h3>

<table class="form-table">

<tr>

<th><label for="simple-local-avatar"><?php _e('上传头像','simple-local-avatars'); ?></label></th>

<td style="width: 50px;" valign="top">

<?php echo get_avatar( $profileuser->ID ); ?>

</td>

<td>

<?php

$options = get_option('simple_local_avatars_caps');

if ( emptyempty($options['simple_local_avatars_caps']) || current_user_can('upload_files') ) {

do_action( 'simple_local_avatar_notices' );

wp_nonce_field( 'simple_local_avatar_nonce', '_simple_local_avatar_nonce', false );

?>

<input type="file" name="simple-local-avatar" id="simple-local-avatar" /><br />

<?php

if ( emptyempty( $profileuser->simple_local_avatar ) )

echo '<span class="description">' . __('尚未设置本地头像,请点击“浏览”按钮上传本地头像。','simple-local-avatars') . '</span>';

else

echo '

<input type="checkbox" name="simple-local-avatar-erase" value="1" /> ' . __('移除本地头像','simple-local-avatars') . '<br />

<span class="description">' . __('如需要修改本地头像,请重新上传新头像。如需要移除本地头像,请选中上方的“移除本地头像”复选框并更新个人资料即可。<br/>移除本地头像后,将恢复使用 Gravatar 头像。','simple-local-avatars') . '</span>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表