Caricamento Avatar Locale Frontend con Simple Local Avatar

4 ago 2011, 11:49:12
Visualizzazioni: 15.4K
Voti: 3

Sto utilizzando Simple Local Avatars per permettere agli utenti di caricare avatar personalizzati.

Come posso creare una pagina frontend con la funzione di caricamento avatar?

Di seguito trovi il codice del plugin Simple Local Avatars:

<?php
    /**
     * 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 = '80', $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))
                return "<img src='http://www.wrongmag.ru/wp-content/themes/wrongmag/scripts/timthumb.php?src=/uploads/default-avatar.png&amp;w={$size}&amp;h={$size}&amp;zc=1' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
            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))
            $size = '80';
        if (empty($alt))
            $alt = get_the_author_meta('display_name', $user_id);
        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))
                $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__)) . '/languages/');
        register_setting('discussion', 'simple_local_avatars_caps', array($this, 'sanitize_options'));
        add_settings_field('simple-local-avatars-caps', __('Permessi 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) . ' />
            ' . __('Permetti solo agli utenti con capacità di caricare file di uploadare 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 upload 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 al gravatar) selezionando l\'opzione di cancellazione.', '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 modificare il tuo avatar locale, contatta l\'amministratore del sito.', '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'))
            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'])) {
                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);
            update_user_meta($user_id, 'simple_local_avatar', array('full' => $avatar['url']));
        } elseif (isset($_POST['simple-local-avatar-erase']) && $_POST['simple-local-avatar-erase'] == 1)
            $this->avatar_delete($user_id);
    }

    function avatar_defaults($avatar_defaults) {
        remove_action('get_avatar', array($this, 'get_avatar'));
        return $avatar_defaults;
    }

    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')):
    function get_simple_local_avatar($id_or_email, $size = '80', $default = '', $alt = false) {
        global $simple_local_avatars;
        return $simple_local_avatars->get_avatar('', $id_or_email, $size, $default, $alt);
    }
endif;

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

Ho provato molte varianti ma nessuna ha funzionato.

Potresti darmi un suggerimento su quali parti di codice devo copiare nel mio template frontend personalizzato?

Grazie mille.

0
Tutte le risposte alla domanda 5
4

aggiungi

do_action('show_user_profile');
do_action('edit_user_profile');

al tuo template personalizzato frontend

e durante il salvataggio aggiungi:

do_action('personal_options_update');
do_action('edit_user_profile_update');
4 ago 2011 12:25:25
Commenti

OK, grazie. Ma per il resto del codice? Quale parte di codice devo inserire tra i due snippet che mi hai dato?

Sergey Sergey
4 ago 2011 12:30:28

hmmm, il tuo template personalizzato per il frontend, dai un'occhiata a http://wordpress.stackexchange.com/questions/9775/how-to-edit-a-user-profile-on-the-front-end/9786#9786

Bainternet Bainternet
4 ago 2011 12:34:31

Grazie per il link, ma tutto ciò di cui ho bisogno è l'input per il caricamento dell'avatar. Puoi indicarmi quale parte di Simple Avatar Uploads devo usare tra i due snippet di codice?

Sergey Sergey
4 ago 2011 12:51:26

Ancora non riesco a farlo funzionare. Qualche suggerimento?

Sergey Sergey
15 ago 2011 12:24:07
1

Sergey, utilizza questo codice nel punto in cui inserirai il form per modificare l'avatar:

<?php
$myAv = new simple_local_avatars();
$myAv->edit_user_profile($profileuser); 
?>
30 ago 2011 10:46:11
Commenti

Per favore utilizza l'inglese, così tutti gli utenti del sito possono beneficiare delle tue risposte.

Rarst Rarst
30 ago 2011 11:54:21
1

Abbiamo bisogno di passare i secondi parametri alle azioni:

  1. L'azione edit_user_profile richiede un oggetto utente di WordPress (lo otteniamo dalla classe WP_User)
  2. L'azione edit_user_profile_update richiede l'ID dell'utente

La prima azione renderizza il campo di upload e l'avatar corrente, mentre la seconda esegue l'upload vero e proprio. Ecco perché dobbiamo attivarla dopo il click sul pulsante. Ascoltiamo il pulsante all'inizio del codice, così dopo l'invio la pagina si aggiorna e l'avatar viene aggiornato (altrimenti apparirebbe come un'immagine rotta).

Ecco la mia configurazione:

<?php if(isset($_POST['user_avatar_edit_submit']))
      {
           do_action('edit_user_profile_update', bbp_get_displayed_user_id());
      }
?>
<form id="your-profile" action="<?php bbp_user_profile_edit_url( bbp_get_displayed_user_id() ); ?>" method="post">
<?php 
    $this_user = new WP_User(bbp_get_displayed_user_id());
    do_action('edit_user_profile', $this_user);
?>

    <input type="submit" name="user_avatar_edit_submit" value="OK"/>
</form>
14 set 2012 05:11:53
Commenti

Sei tu il ragazzo che ha fatto originariamente la domanda?

kaiser kaiser
14 set 2012 05:23:52
1
<?php get_header();
global $user_ID;
if ($user_ID) {
$user_info = get_userdata($user_ID);
$id = $user_info->ID;
}
 ?>
<?php if(isset($_POST['user_avatar_edit_submit']))
      {
           do_action('edit_user_profile_update', $id);
      }
?>

<form id="your-profile" action="" method="post">
    <?php
    $myAv = new simple_local_avatars();
    $myAv->edit_user_profile($user_info);
    ?>
    <input type="submit" name="user_avatar_edit_submit" value="OK"/>
</form>
19 nov 2012 16:31:23
Commenti

Spiegare cosa sta succedendo nel tuo codice di esempio migliorerebbe davvero la qualità della tua risposta. Che sia una breve introduzione o sotto forma di commenti nel codice.

brasofilo brasofilo
19 nov 2012 18:42:11
5
-2

Nota del Redattore: Il seguente snippet sembra contenere parte del codice sorgente del seguente plugin, Simple Local Avatars.

<?php
global $current_user;
 $user_id = get_current_user_id();
$user_last = get_user_meta($user_id);
$unserialize = unserialize($user_last['simple_local_avatar'][0]);
class Simple_Local_Avatarssss {
    private $user_id_being_edited, $avatar_upload_error, $remove_nonce, $avatar_ratings;
    public $options;        
    public function unique_filename_callback( $dir, $name, $ext ) {
        $user = get_user_by( 'id', (int) $this->user_id_being_edited ); 
        $name = $base_name = sanitize_file_name( $user->display_name . '_avatar_' . time() );
        // assicurarsi che non ci siano conflitti con i nomi dei file esistenti
        $number = 1;
        while ( file_exists( $dir . "/$name$ext" ) ) {
            $name = $base_name . '_' . $number;
            $number++;
        }

        return $name . $ext;
    }
    private function assign_new_user_avatar( $url_or_media_id, $user_id ) {
        // elimina il vecchio avatar
        $this->avatar_delete( $user_id );   // elimina le vecchie immagini se l'operazione ha successo
        $meta_value = array();
        // imposta il nuovo avatar
        if ( is_int( $url_or_media_id ) ) {
            $meta_value['media_id'] = $url_or_media_id;
            $url_or_media_id = wp_get_attachment_url( $url_or_media_id );
        }
        $meta_value['full'] = $url_or_media_id;
        update_user_meta( $user_id, 'simple_local_avatar', $meta_value );   // salva le informazioni dell'utente (sovrascrivendo le vecchie)
    }

    public function avatar_delete( $user_id ) {
        $old_avatars = (array) get_user_meta( $user_id, 'simple_local_avatar', true );
        if ( empty( $old_avatars ) )
            return;
        // se era un media caricato, non cancellare la dimensione completa o provare a cancellare un ID
        if ( array_key_exists( 'media_id', $old_avatars ) )
            unset( $old_avatars['media_id'], $old_avatars['full'] );
        if ( ! empty( $old_avatars ) ) {
            $upload_path = wp_upload_dir();
            foreach ($old_avatars as $old_avatar ) {
                // ricava il percorso del file basato sulla directory di upload
                $old_avatar_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $old_avatar );
                if ( file_exists( $old_avatar_path ) )
                    unlink( $old_avatar_path );
            }
        }

        delete_user_meta( $user_id, 'simple_local_avatar' );
        delete_user_meta( $user_id, 'simple_local_avatar_rating' );
    }

    public function edit_user_profile_update( $file , $user_id ) {
                $_FILES['simple-local-avatar'] = $file['file'];
        // verifica i file caricati
        if ( ! empty( $_FILES['simple-local-avatar']['name'] ) ) :
            // supporto per frontend (theme my profile ecc.)
            if ( ! function_exists( 'wp_handle_upload' ) )
                require_once( ABSPATH . 'wp-admin/includes/file.php' );
            $this->user_id_being_edited = $user_id; // rende user_id noto alla funzione unique_filename_callback
            $avatar = wp_handle_upload( $_FILES['simple-local-avatar'], array(
                'mimes'                     => array(
                    'jpg|jpeg|jpe'  => 'image/jpeg',
                    'gif'           => 'image/gif',
                    'png'           => 'image/png',
                ),
                'test_form'                 => false,
                'unique_filename_callback'  => array( $this, 'unique_filename_callback' )
            ) );
            if ( empty($avatar['file']) ) {     // gestisce gli errori
                switch ( $avatar['error'] ) {
                    case 'File type does not meet security guidelines. Try another.' :
                        $this->avatar_upload_error = __('Per favore carica un file immagine valido per l\'avatar.','simple-local-avatars');
                        break;
                    default :
                        $this->avatar_upload_error = '<strong>' . __('Si è verificato un errore durante il caricamento dell\'avatar:','simple-local-avatars') . '</strong> ' . esc_html( $avatar['error'] );
                }

                return;
            }
            $this->assign_new_user_avatar( $avatar['url'], $user_id );
        endif;
        // gestisce la valutazione
        if ( isset( $avatar['url'] ) || $avatar = get_user_meta( $user_id, 'simple_local_avatar', true ) ) {
            if ( empty( $_POST['simple_local_avatar_rating'] ) || ! array_key_exists( $_POST['simple_local_avatar_rating'], $this->avatar_ratings ) )
            //  $_POST['simple_local_avatar_rating'] = key( $this->avatar_ratings );
                                update_user_meta( $user_id, 'simple_local_avatar_rating', $_POST['simple_local_avatar_rating'] );
                                return 1;
        }
    }
}

if(isset($_POST['sub']))
{
    $fname=$_FILES['file']['name'];
    $ftype=$_FILES['file']['type']; 
}
if(isset($_FILES['file']['name']) && !empty($_FILES['file']['name'])     ){
    $simple_local_avatars = new Simple_Local_Avatarssss;
    $result = $simple_local_avatars->edit_user_profile_update($_FILES,$user_id);
    if($result):
  echo 'Aggiornato';
    endif; } ?>
<form action="" method="POST" enctype="multipart/form-data">
    <?php echo get_avatar( $user_id, 96, $default, $alt ); ?><br /><br />
    <input type="file" name="file"><br /><br />
    <input style="float: left;" type="submit" name="sub" value="Carica Immagine">
</form>
3 giu 2014 13:46:32
Commenti

Per favore, aggiungi il tuo codice correttamente. Evidenzia tutto il tuo codice nell'editor e clicca sul segno {}. Questo aggiungerà correttamente il tuo codice in un blocco di codice. Inoltre, aggiungi una spiegazione su cosa fa il tuo codice e come funziona

Pieter Goosen Pieter Goosen
3 giu 2014 13:56:34

Inoltre: Se hai copiato quel codice da qualche parte, devi indicare/collegare la fonte e rispettarne la licenza. Quindi: è il tuo codice o di qualcun altro?

kaiser kaiser
3 giu 2014 14:22:02

@kaiser Sembra essere un set di esempio del plugin sopra citato.

Adam Adam
3 giu 2014 15:18:08

@userabuser Grazie per l'intervento. Sei sicuro riguardo la parte "to fit this question"?

kaiser kaiser
3 giu 2014 15:42:37

@kaiser No, ripensandoci dopo aver scritto, mi rendo conto che potrebbe non essere il caso esatto. Probabilmente possiamo omettere quella parte. Fatto.

Adam Adam
3 giu 2014 15:45:26