Rimozione del supporto Gravatar.com per WordPress e Simple Local Avatar


10

Attualmente sto usando Simple Local Avatar su molti dei miei blog che consentono alle persone di caricare il proprio avatar personalizzato.

Per quanto ne so, Simple Local Avatars utilizza get_avatarper verificare se è stato selezionato un avatar personalizzato, se non per impostazione predefinita su Gravatar.com.

Sarebbe possibile disabilitare il bit Gravatar.com in qualche modo, disabilitando completamente Gravatar.com e restituendo solo qualche immagine ospitata locale se non fosse selezionato alcun avatar personalizzato?

Spero che sia corretto pubblicarlo qui, ma questo sarebbe il file Simple Local Avatars

<?php
/*
Plugin Name: Simple Local Avatars
Plugin URI: http://www.get10up.com/plugins/simple-local-avatars-wordpress/
Description: Adds an avatar upload field to user profiles if the current user has media permissions. Generates requested sizes on demand just like Gravatar! Simple and lightweight.
Version: 1.2.3
Author: Jake Goldman (10up), Oomph Inc
Author URI: http://www.get10up.com
*/

// add field to user profiles
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)) // if called by filter
                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)) // ensure valid size
            $size = '96';
        if (empty($alt))
            $alt = get_the_author_meta('display_name', $user_id);
        // generate a new size
        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)) // deal with original being >= to original image (or lack of sizing ability)
                $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', __('Local Avatar Permissions', '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) . ' />
                ' . __('Only allow users with file upload capabilities to upload local avatars (Authors and above)', '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('Upload 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">' . __('No local avatar is set. Use the upload field to add a local avatar.', 'simple-local-avatars') . '</span>';
                    else
                        echo '
                            <input type="checkbox" name="simple-local-avatar-erase" value="1" /> ' . __('Delete local avatar', 'simple-local-avatars') . '<br />
                            <span class="description">' . __('Replace the local avatar by uploading a new avatar, or erase the local avatar (falling back to a gravatar) by checking the delete option.', 'simple-local-avatars') . '</span>
                        ';
                    } else {
                        if (empty($profileuser->simple_local_avatar))
                            echo '<span class="description">' . __('No local avatar is set. Set up your avatar at Gravatar.com.', 'simple-local-avatars') . '</span>';
                        else
                            echo '<span class="description">' . __('You do not have media management permissions. To change your local avatar, contact the blog administrator.', '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')) //security
            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'])) // handle failures
                {
                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",__("Please upload a valid image file for the avatar.","simple-local-avatars"));'));
                        break;
                    default:
                        add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error","<strong>".__("There was an error uploading the avatar:","simple-local-avatars")."</strong> ' . esc_attr($avatar['error']) . '");'));
                }
                return;
            }
            $this->avatar_delete($user_id); // delete old images if successful
            update_user_meta($user_id, 'simple_local_avatar', array('full' => $avatar['url'])); // save user information (overwriting old)
        } elseif (isset($_POST['simple-local-avatar-erase']) && $_POST['simple-local-avatar-erase'] == 1)
            $this->avatar_delete($user_id);
    }

    // remove the custom get_avatar hook for the default avatar list output on options-discussion.php
    function avatar_defaults($avatar_defaults) {
        remove_action('get_avatar', array($this, 'get_avatar'));
        return $avatar_defaults;
    }

    // delete avatars based on 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')):
/*
 * more efficient to call simple local avatar directly in theme and avoid gravatar setup
 * 
 * @param int|string|object $id_or_email A user ID, email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternate text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
 */
    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;

// on uninstallation, remove the custom field from the users and delete the local avatars
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');
}

Risposte:


9

Se vuoi una soluzione ultraleggera e non ti dispiace dilettarti con un piccolo codice, inseriscilo nel tuo functions.php;

function __default_local_avatar()
{
    // this assumes default_avatar.png is 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 un po 'più di succo, con la possibilità di gestire tutto nell'amministratore, dai un'occhiata a Aggiungi nuovo avatar predefinito .

AGGIORNAMENTO: ho scritto un plug-in rapido da utilizzare insieme a Simple Local Avatar.

<?php

/**
 * Plugin Name: Disable Default Avatars
 * Plugin URI: http://wordpress.stackexchange.com/questions/17413
 * Description: To be used alongside <a href="http://www.get10up.com/plugins/simple-local-avatars-wordpress/">Simple Local Avatars</a>, disabling all default avatars and falling back to a single image. Use the filter <code>local_default_avatar</code> to set the path of the image.
 * Version: 1.0
 * Author: TheDeadMedic
 * Author URI: http://wordpress.stackexchange.com/users/1685/thedeadmedic
 */

if ( !function_exists( 'get_avatar' ) ) :
/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternate text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
    if ( ! get_option('show_avatars') )
        return false;

    static $default_url; // use static vars for a little 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;

?>

La descrizione del plugin dovrebbe essere autoesplicativa, ma essenzialmente è l'avatar predefinito http://wordpress-theme-path/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://somewhere/else.jpg';
}
add_filter( 'local_default_avatar', '__my_theme_default_avatar' );

Quasi :) Questo imposta un nuovo avatar predefinito, anziché ie. l'uomo misterioso. Sarebbe possibile disabilitare completamente anche il supporto Gravatar e poter scegliere tra il tuo e gli Avatar locali semplici?

Controlla la mia risposta rivista.
TheDeadMedic,

Ciao DeadMedic, insomma, sei fantastico (: più che apprezzato!

4

Ho sostituito con successo tutti gli avatar di gravitar.com con la mia immagine avatar ospitata localmente aggiungendo questo al function.phpfile 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' );

Ciò presuppone che tu abbia un avatar predefinito locale chiamato user.pngnella imagessottodirectory del tuo tema .

Nel discussion settingspannello di amministrazione, assicurati che "Mostra avatar" sia selezionato.

Non l'ho provato con Simple Local Avatar, ma funziona benissimo con Basic User Avatar (che è un fork leggero di Simple Local Avatar).

SUGGERIMENTO : se stai progettando il tuo avatar predefinito, ti consiglio di renderlo 300x300 pixel in modo che sembrerà buono sugli schermi "retina" quando WP lo visualizza a "150x150". Quindi puoi ridurre significativamente la dimensione del file dell'immagine comprimendolo su tinyPNG.com .


0

Rimuovi avatar completamente. Inserisci questo codice in Functions.php dal 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 ''; } );
    }
}

Puoi spiegarci un po 'di più come aiuta.
bravokeyl

Sostituisce il tag IMG con una stringa vuota. Restituisce anche una stringa vuota nell'URL avatar. Lasciando wordpress predefinito assegnato
Bryan Contreras il

NOTA Non conosco molto l'inglese, a volte uso un traduttore.
Bryan Contreras,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.