Disattivare il supporto a Gravatar.com per WordPress e Simple Local Avatars

16 mag 2011, 20:05:02
Visualizzazioni: 18.9K
Voti: 11

Attualmente sto utilizzando Simple Local Avatars su diversi miei blog, permettendo agli utenti di caricare i propri avatar personalizzati.

Per quanto ne so, Simple Local Avatars utilizza get_avatar per verificare se è selezionato un avatar personalizzato, altrimenti ricade su Gravatar.com.

Sarebbe possibile disabilitare completamente Gravatar.com e restituire solo un'immagine ospitata localmente quando non è selezionato un avatar personalizzato?

Spero sia appropriato postarlo qui, ma questo sarebbe il file di Simple Local Avatars

<?php
/*
Plugin Name: Simple Local Avatars
Plugin URI: http://www.get10up.com/plugins/simple-local-avatars-wordpress/
Description: Aggiunge un campo per il caricamento di avatar nei profili utente se l'utente corrente ha i permessi per i media. Genera le dimensioni richieste al volo proprio come Gravatar! Semplice e leggero.
Version: 1.2.3
Author: Jake Goldman (10up), Oomph Inc
Author URI: http://www.get10up.com
*/

// aggiunge campo ai profili utente
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)) // se chiamato dal filtro
                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)) // assicura dimensione valida
            $size = '96';
        if (empty($alt))
            $alt = get_the_author_meta('display_name', $user_id);
        // genera una nuova dimensione
        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)) // gestisce originale >= all'immagine originale (o mancanza di capacità di ridimensionamento)
                $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', __('Permessi per Avatar Locali', '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) . ' />
                ' . __('Consenti solo agli utenti con capacità di caricare file di caricare avatar locali (Autori e superiori)', '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('Carica 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">' . __('Nessun avatar locale impostato. Usa il campo di caricamento per aggiungere un avatar locale.', 'simple-local-avatars') . '</span>';
                    else
                        echo '
                            <input type="checkbox" name="simple-local-avatar-erase" value="1" /> ' . __('Elimina avatar locale', 'simple-local-avatars') . '<br />
                            <span class="description">' . __('Sostituisci l\'avatar locale caricandone uno nuovo, o eliminalo (tornando a un gravatar) selezionando l\'opzione di eliminazione.', 'simple-local-avatars') . '</span>
                        ';
                    } else {
                        if (empty($profileuser->simple_local_avatar))
                            echo '<span class="description">' . __('Nessun avatar locale impostato. Configura il tuo avatar su Gravatar.com.', 'simple-local-avatars') . '</span>';
                        else
                            echo '<span class="description">' . __('Non hai i permessi per gestire i media. Per cambiare il tuo avatar locale, contatta l\'amministratore del blog.', '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')) //sicurezza
            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'])) // gestisce errori
                {
                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",__("Per favore carica un file immagine valido per l\'avatar.","simple-local-avatars"));'));
                        break;
                    default:
                        add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error","<strong>".__("Errore nel caricamento dell\'avatar:","simple-local-avatars")."</strong> ' . esc_attr($avatar['error']) . '");'));
                }
                return;
            }
            $this->avatar_delete($user_id); // elimina vecchie immagini se successo
            update_user_meta($user_id, 'simple_local_avatar', array('full' => $avatar['url'])); // salva informazioni utente (sovrascrivendo vecchie)
        } elseif (isset($_POST['simple-local-avatar-erase']) && $_POST['simple-local-avatar-erase'] == 1)
            $this->avatar_delete($user_id);
    }

    // rimuove l'hook get_avatar personalizzato per l'output predefinito della lista avatar su options-discussion.php
    function avatar_defaults($avatar_defaults) {
        remove_action('get_avatar', array($this, 'get_avatar'));
        return $avatar_defaults;
    }

    // elimina avatar basati su 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')):
/*
 * più efficiente chiamare simple local avatar direttamente nel tema ed evitare setup gravatar
 * 
 * @param int|string|object $id_or_email Un ID utente, indirizzo email, o oggetto commento
 * @param int $size Dimensione dell'immagine avatar
 * @param string $default URL a un'immagine predefinita da usare se non è disponibile l'avatar
 * @param string $alt Testo alternativo da usare nel tag immagine. Predefinito vuoto
 * @return string tag <img> per l'avatar dell'utente
 */
    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;

// alla disinstallazione, rimuove il campo personalizzato dagli utenti ed elimina gli avatar locali
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');
}
0
Tutte le risposte alla domanda 4
3

Se vuoi una soluzione super-leggera e non ti dispiace sporcarti un po' le mani con il codice, inserisci questo nel tuo functions.php:

function __default_local_avatar()
{
    // questo presuppone che default_avatar.png sia in wp-content/themes/active-theme/images
    return get_bloginfo('template_directory') . '/images/default_avatar.png';
}
add_filter( 'pre_option_avatar_default', '__default_local_avatar' );

In alternativa, se vuoi qualcosa di più completo, con la possibilità di gestire tutto dal pannello di amministrazione, dai un'occhiata a Aggiungi Nuovo Avatar Predefinito.

AGGIORNAMENTO: Ho scritto un plugin rapido da utilizzare insieme a Simple Local Avatars.

<?php

/**
 * Plugin Name: Disabilita Avatar Predefiniti
 * Plugin URI: http://wordpress.stackexchange.com/questions/17413
 * Description: Da utilizzare insieme a <a href="http://www.get10up.com/plugins/simple-local-avatars-wordpress/">Simple Local Avatars</a>, disabilita tutti gli avatar predefiniti e utilizza un'unica immagine di fallback. Usa il filtro <code>local_default_avatar</code> per impostare il percorso dell'immagine.
 * Version: 1.0
 * Author: TheDeadMedic
 * Author URI: http://wordpress.stackexchange.com/users/1685/thedeadmedic
 */

if ( !function_exists( 'get_avatar' ) ) :
/**
 * Recupera l'avatar per un utente fornito un ID utente o un indirizzo email.
 *
 * @since 2.5
 * @param int|string|object $id_or_email Un ID utente, indirizzo email o oggetto commento
 * @param int $size Dimensione dell'immagine dell'avatar
 * @param string $default URL di un'immagine predefinita da usare se non è disponibile un avatar
 * @param string $alt Testo alternativo da usare nel tag immagine. Predefinito vuoto
 * @return string Tag <img> per l'avatar dell'utente
*/
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
    if ( ! get_option('show_avatars') )
        return false;

    static $default_url; // usa variabili statiche per un po' di 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' ) . ' Predefinito' );
}
add_filter( 'avatar_defaults', '__limit_default_avatars' );
endif;

?>

La descrizione del plugin dovrebbe essere auto-esplicativa, ma essenzialmente l'avatar predefinito è http://percorso-tema-wordpress/images/default_avatar.png, che può essere filtrato nel functions.php del tuo tema se esiste altrove:

function __my_theme_default_avatar( $url )
{
    return 'http://percorso/alternativo.jpg';
}
add_filter( 'local_default_avatar', '__my_theme_default_avatar' );
17 mag 2011 01:16:22
Commenti

Quasi :) Questo imposta un nuovo avatar predefinito, invece di ad esempio il mystery man. Sarebbe possibile disabilitare completamente il supporto a Gravatar, e poter scegliere solo tra il tuo e Simple Local Avatars?

User User
17 mag 2011 13:52:30

Controlla la mia risposta rivista.

TheDeadMedic TheDeadMedic
19 mag 2011 13:37:39

Ciao DeadMedic, in breve: sei fantastico (: Più che apprezzato!

User User
19 mag 2011 20:33:34
0

Ho sostituito con successo tutti gli avatar di gravatar.com con la mia immagine avatar ospitata localmente aggiungendo questo al file function.php del mio tema:

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' );

Questo presuppone che tu abbia un avatar predefinito locale chiamato user.png nella sottocartella images del tuo tema.

Nel pannello di amministrazione delle impostazioni di discussione, assicurati che "Mostra avatar" sia selezionato.

Non ho testato questo con Simple Local Avatars, ma funziona perfettamente con Basic User Avatars (che è un fork leggero di Simple Local Avatars).

SUGGERIMENTO: Se stai progettando il tuo avatar predefinito, ti consiglio di renderlo di 300x300 pixel in modo che appaia nitido sugli schermi "retina" quando WordPress lo visualizza a "150x150". Puoi poi ridurre significativamente la dimensione del file comprimendolo su tinyPNG.com.

11 ago 2014 03:27:13
0

Estensione alla domanda originale: Nel caso in cui tu voglia omettere/sostituire la nota "Puoi cambiare la tua immagine del profilo su Gravatar" nella pagina del profilo di Wordpress, aggiungi questo al functions.php del tuo tema attivo:

/**
 * Disabilita la nota di Gravatar nelle impostazioni del profilo WP
 */
function replace_wp_gravatar_note()
{
    // rimuovi:
    return null;
    // sostituisci:
    // return 'Puoi cambiare la tua immagine del profilo <a href="' . get_site_url(null, 'user', 'https') . '">qui</a>.';
}
add_filter( 'user_profile_picture_description', 'replace_wp_gravatar_note' );
5 apr 2021 16:56:20
3

Rimuovi completamente gli avatar. Inserisci questo codice nel file functions.php del tuo tema in uso.

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 ''; } );
    }
}
19 nov 2016 04:03:04
Commenti

Puoi spiegare un po' di più come aiuta.

bravokeyl bravokeyl
19 nov 2016 05:21:32

Sostituisce il tag IMG con una stringa vuota. Restituisce anche una stringa vuota nell'URL dell'avatar. Lasciando l'assegnazione predefinita di WordPress

Bryan Contreras Bryan Contreras
20 nov 2016 02:36:24

NOTA Non conosco molto l'inglese, a volte uso un traduttore.

Bryan Contreras Bryan Contreras
20 nov 2016 02:36:39