Caricamento Avatar Locale Frontend con Simple Local Avatar
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&w={$size}&h={$size}&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.

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

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

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?

Abbiamo bisogno di passare i secondi parametri alle azioni:
- L'azione
edit_user_profile
richiede un oggetto utente di WordPress (lo otteniamo dalla classe WP_User) - 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>

<?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>

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>

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

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?

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