Cum să dezactivezi Gravatar.com în WordPress și să folosești doar Simple Local Avatars
În prezent folosesc Simple Local Avatars pe mai multe dintre blogurile mele, permițând utilizatorilor să-și încarce propriile avatare personalizate.
Din câte știu, Simple Local Avatars folosește get_avatar
pentru a verifica dacă este selectat un avatar personalizat, iar dacă nu, revine la Gravatar.com.
Este posibil să dezactivez partea cu Gravatar.com cumva, să dezactivez complet Gravatar.com și să returnez doar o imagine găzduită local dacă nu este selectat niciun avatar personalizat?
Sper că este OK să postez aici, dar acesta ar fi fișierul Simple Local Avatars
<?php
/*
Plugin Name: Simple Local Avatars
Plugin URI: http://www.get10up.com/plugins/simple-local-avatars-wordpress/
Description: Adaugă un câmp pentru încărcarea avatarului în profilurile utilizatorilor dacă utilizatorul curent are permisiuni media. Generează dimensiunile cerute la cerere exact ca Gravatar! Simplu și ușor.
Version: 1.2.3
Author: Jake Goldman (10up), Oomph Inc
Author URI: http://www.get10up.com
*/
// adaugă câmp în profilurile utilizatorilor
class simple_local_avatars {
function simple_local_avatars() {
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'));
}
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)) {
if ($user = get_user_by_email($id_or_email))
$user_id = $user->ID;
} elseif (is_object($id_or_email) && !empty($id_or_email->user_id))
$user_id = (int) $id_or_email->user_id;
if (!empty($user_id))
$local_avatars = get_user_meta($user_id, 'simple_local_avatar', true);
if (!isset($local_avatars) || empty($local_avatars) || !isset($local_avatars['full'])) {
if (!empty($avatar)) // dacă este apelat prin filtru
return $avatar;
remove_filter('get_avatar', 'get_simple_local_avatar');
$avatar = get_avatar($id_or_email, $size, $default);
add_filter('get_avatar', 'get_simple_local_avatar', 10, 5);
return $avatar;
}
if (!is_numeric($size)) // asigură dimensiune validă
$size = '96';
if (empty($alt))
$alt = get_the_author_meta('display_name', $user_id);
// generează o nouă dimensiune
if (empty($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);
if (is_wp_error($image_sized)) // gestionează cazul când originalul este >= imaginea originală (sau lipsa capacității de redimensionare)
$local_avatars[$size] = $local_avatars['full'];
else
$local_avatars[$size] = str_replace($upload_path['basedir'], $upload_path['baseurl'], $image_sized);
update_user_meta($user_id, 'simple_local_avatar', $local_avatars);
} elseif (substr($local_avatars[$size], 0, 4) != 'http')
$local_avatars[$size] = site_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 $avatar;
}
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', __('Permisiuni Avatar Local', 'simple-local-avatars'), array($this, 'avatar_settings_field'), 'discussion', 'avatars');
}
function sanitize_options($input) {
$new_input['simple_local_avatars_caps'] = empty($input['simple_local_avatars_caps']) ? 0 : 1;
return $new_input;
}
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) . ' />
' . __('Permite doar utilizatorilor cu drepturi de încărcare fișiere să încarce avatare locale (Autori și mai sus)', 'simple-local-avatars') . '
</label>
';
}
function edit_user_profile($profileuser) {
?>
<h3><?php _e('Avatar', 'simple-local-avatars'); ?></h3>
<table class="form-table">
<tr>
<th><label for="simple-local-avatar"><?php _e('Încarcă Avatar', '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 (empty($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 (empty($profileuser->simple_local_avatar))
echo '<span class="description">' . __('Niciun avatar local nu este setat. Folosește câmpul de încărcare pentru a adăuga un avatar local.', 'simple-local-avatars') . '</span>';
else
echo '
<input type="checkbox" name="simple-local-avatar-erase" value="1" /> ' . __('Șterge avatarul local', 'simple-local-avatars') . '<br />
<span class="description">' . __('Înlocuiește avatarul local prin încărcarea unui avatar nou, sau șterge avatarul local (revenind la gravatar) bifând opțiunea de ștergere.', 'simple-local-avatars') . '</span>
';
} else {
if (empty($profileuser->simple_local_avatar))
echo '<span class="description">' . __('Niciun avatar local nu este setat. Configurează-ți avatarul pe Gravatar.com.', 'simple-local-avatars') . '</span>';
else
echo '<span class="description">' . __('Nu ai permisiuni de gestionare media. Pentru a-ți schimba avatarul local, contactează administratorul blogului.', 'simple-local-avatars') . '</span>';
}
?>
</td>
</tr>
</table>
<script type="text/javascript">
var form = document.getElementById('your-profile');
form.encoding = 'multipart/form-data';
form.setAttribute('enctype', 'multipart/form-data');
</script>
<?php
}
function edit_user_profile_update($user_id) {
if (!wp_verify_nonce($_POST['_simple_local_avatar_nonce'], 'simple_local_avatar_nonce')) //securitate
return;
if (!empty($_FILES['simple-local-avatar']['name'])) {
$mimes = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
'bmp' => 'image/bmp',
'tif|tiff' => 'image/tiff'
);
$avatar = wp_handle_upload($_FILES['simple-local-avatar'], array('mimes' => $mimes, 'test_form' => false));
if (empty($avatar['file'])) // gestionează erorile
{
switch ($avatar['error']) {
case 'File type does not meet security guidelines. Try another.':
add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error",__("Te rog încarcă un fișier imagine valid pentru avatar.","simple-local-avatars"));'));
break;
default:
add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error","<strong>".__("A apărut o eroare la încărcarea avatarului:","simple-local-avatars")."</strong> ' . esc_attr($avatar['error']) . '");'));
}
return;
}
$this->avatar_delete($user_id); // șterge imaginile vechi dacă încărcarea reușește
update_user_meta($user_id, 'simple_local_avatar', array('full' => $avatar['url'])); // salvează informațiile utilizatorului (suprascriind cele vechi)
} elseif (isset($_POST['simple-local-avatar-erase']) && $_POST['simple-local-avatar-erase'] == 1)
$this->avatar_delete($user_id);
}
// elimină hook-ul custom get_avatar pentru lista implicită de avatare în options-discussion.php
function avatar_defaults($avatar_defaults) {
remove_action('get_avatar', array($this, 'get_avatar'));
return $avatar_defaults;
}
// șterge avatarele bazate pe user_id
function avatar_delete($user_id) {
$old_avatars = get_user_meta($user_id, 'simple_local_avatar', true);
$upload_path = wp_upload_dir();
if (is_array($old_avatars)) {
foreach ($old_avatars as $old_avatar) {
$old_avatar_path = str_replace($upload_path['baseurl'], $upload_path['basedir'], $old_avatar);
@unlink($old_avatar_path);
}
}
delete_user_meta($user_id, 'simple_local_avatar');
}
}
$simple_local_avatars = new simple_local_avatars;
if (!function_exists('get_simple_local_avatar')):
/*
* mai eficient să apelezi direct avatarul local în tema și să eviți setup-ul gravatar
*
* @param int|string|object $id_or_email Un ID utilizator, adresă email sau obiect comentariu
* @param int $size Dimensiunea imaginii avatar
* @param string $default URL către o imagine implicită de folosit dacă nu este disponibil avatar
* @param string $alt Text alternativ de folosit în tag-ul imagine. Implicit gol
* @return string tag-ul <img> pentru avatarul utilizatorului
*/
function get_simple_local_avatar($id_or_email, $size = '96', $default = '', $alt = false) {
global $simple_local_avatars;
return $simple_local_avatars->get_avatar('', $id_or_email, $size, $default, $alt);
}
endif;
// la dezinstalare, elimină câmpul custom de la utilizatori și șterge avatarele locale
register_uninstall_hook(__FILE__, 'simple_local_avatars_uninstall');
function simple_local_avatars_uninstall() {
$simple_local_avatars = new simple_local_avatars;
$users = get_users_of_blog();
foreach ($users as $user)
$simple_local_avatars->avatar_delete($user->user_id);
delete_option('simple_local_avatars_caps');
}
Dacă dorești o soluție extrem de ușoară și nu te deranjează să lucrezi puțin cu codul, adaugă acest cod în fișierul tău functions.php
:
function __default_local_avatar()
{
// această funcție presupune că default_avatar.png se află în wp-content/themes/active-theme/images
return get_bloginfo('template_directory') . '/images/default_avatar.png';
}
add_filter( 'pre_option_avatar_default', '__default_local_avatar' );
Alternativ, dacă dorești mai multe opțiuni și posibilitatea de a gestiona totul din panoul de administrare, verifică Add New Default Avatar.
ACTUALIZARE: Am scris un plugin rapid pentru a fi folosit împreună cu Simple Local Avatars.
<?php
/**
* Plugin Name: Disable Default Avatars
* Plugin URI: http://wordpress.stackexchange.com/questions/17413
* Description: Pentru a fi folosit împreună cu <a href="http://www.get10up.com/plugins/simple-local-avatars-wordpress/">Simple Local Avatars</a>, dezactivează toate avatarurile implicite și folosește o singură imagine. Folosește filtrul <code>local_default_avatar</code> pentru a seta calea imaginii.
* Version: 1.0
* Author: TheDeadMedic
* Author URI: http://wordpress.stackexchange.com/users/1685/thedeadmedic
*/
if ( !function_exists( 'get_avatar' ) ) :
/**
* Obține avatarul pentru un utilizator care a furnizat un ID de utilizator sau o adresă de email.
*
* @since 2.5
* @param int|string|object $id_or_email Un ID de utilizator, adresă de email sau obiect de comentariu
* @param int $size Dimensiunea imaginii avatarului
* @param string $default URL către o imagine implicită de folosit dacă nu este disponibil un avatar
* @param string $alt Text alternativ de folosit în eticheta img. Implicit este gol
* @return string Eticheta <img> pentru avatarul utilizatorului
*/
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
if ( ! get_option('show_avatars') )
return false;
static $default_url; // folosește variabile statice pentru puțin caching
if ( !isset( $default_url ) )
$default_url = apply_filters( 'local_default_avatar', get_template_directory_uri() . '/images/default_avatar.png' );
if ( false === $alt)
$safe_alt = '';
else
$safe_alt = esc_attr( $alt );
if ( !is_numeric( $size ) )
$size = '96';
$avatar = "<img alt='{$safe_alt}' src='{$default_url}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
return apply_filters( 'get_avatar', $avatar, $id_or_email, $size, $default, $alt );
}
endif;
function __limit_default_avatars_setting( $default )
{
return 'local_default';
}
add_filter( 'pre_option_avatar_default', '__limit_default_avatars_setting' );
if ( is_admin() ) :
function __limit_default_avatars( $defaults )
{
return array( 'local_default' => get_bloginfo( 'name' ) . ' Default' );
}
add_filter( 'avatar_defaults', '__limit_default_avatars' );
endif;
?>
Descrierea plugin-ului ar trebui să fie auto-explicativă, dar, în esență, avatarul implicit este http://wordpress-theme-path/images/default_avatar.png
, care poate fi filtrat în functions.php
al temei tale dacă există în altă parte:
function __my_theme_default_avatar( $url )
{
return 'http://somewhere/else.jpg';
}
add_filter( 'local_default_avatar', '__my_theme_default_avatar' );

Aproape :) Aceasta setează un nou avatar implicit, în loc de, de exemplu, omul misterios. Ar fi posibil să dezactivezi complet suportul pentru Gravatar și să poți alege doar între al tău și Simple Local Avatars?

Am înlocuit cu succes toate avatarurile de pe gravatar.com cu propria mea imagine de avatar găzduită local, adăugând acest cod în fișierul function.php
al temei mele:
define('DEFAULT_AVATAR_URL', get_template_directory_uri() . '/images/user.png');
function no_gravatars( $avatar ) {
return preg_replace( "/http.*?gravatar\.com[^\']*/", DEFAULT_AVATAR_URL, $avatar );
}
add_filter( 'get_avatar', 'no_gravatars' );
Acest cod presupune că aveți un avatar implicit local numit user.png
în subdirectorul images
al temei dumneavoastră.
În panoul de administrare setări de discuții
, asigurați-vă că opțiunea "Afișează avataruri" este bifată.
Nu am testat acest lucru cu Simple Local Avatars, dar funcționează excelent cu Basic User Avatars (care este o versiune ușoară derivată din Simple Local Avatars).
SFAT: Dacă proiectați propriul avatar implicit, recomand să îl faceți la dimensiunea de 300x300 pixeli pentru a arăta bine pe ecranele "retina" când WordPress îl afișează la "150x150". Apoi puteți reduce semnificativ dimensiunea fișierului imaginii prin comprimare pe tinyPNG.com.

Extindere la întrebarea inițială: În cazul în care încerci să omiți/înlocuiești notița "You can change your profile picture on Gravatar" din pagina de profil Wordpress, adaugă acest cod în functions.php al temei active:
/**
* Dezactivează notița despre Gravatar în setările de profil WP
*/
function replace_wp_gravatar_note()
{
// elimină:
return null;
// înlocuiește:
// return 'Poți schimba imaginea de profil <a href="' . get_site_url(null, 'user', 'https') . '">aici</a>.';
}
add_filter( 'user_profile_picture_description', 'replace_wp_gravatar_note' );

Elimină complet avatarurile. Pune acest cod în fișierul functions.php din tema ta activă.
add_action( 'init', 'qmas_remove_avatars' );
if (!function_exists('qmas_remove_avatars')) {
function qmas_remove_avatars() {
add_filter( 'bp_core_fetch_avatar', function () { return ''; } );
add_filter( 'get_avatar', function () { return ''; } );
add_filter( 'bp_get_signup_avatar', function () { return ''; } );
}
}

Înlocuiește tag-ul IMG cu un șir gol. De asemenea, returnează un șir gol în URL-ul avatarului. Lăsând atribuirea implicită din WordPress
