Subir avatar desde el frontend
En el enlace de codepad puedes encontrar lo que estoy usando para editar el perfil desde el front-end. http://codepad.org/QJjDEA7p
El código funciona (que obtuve de Cómo editar un perfil de usuario en el front end? y modifiqué algunas cosas para que funcione correctamente).
He instalado el plugin Simple Local Avatar para permitir la subida de avatares, pero ¿cómo puedo modificar el código para que también funcione desde el front-end? Encontré lo siguiente, lo probé, mostró el botón de subida, no mostró el avatar actual y no me permitió cambiarlo.
Gracias por tu ayuda con esto.
do_action('show_user_profile');
do_action('edit_user_profile');
do_action('personal_options_update');
do_action('edit_user_profile_update');
ACTUALIZACIÓN
Ofrezco una recompensa de 50 puntos por un ejemplo funcional. Desafortunadamente no puedo hacer que funcione el ejemplo de Bainternet que probé con el plugin User Avatar también, y estoy realmente atascado con este problema sin encontrar la solución.
Solo necesitas estos dos hooks: show_user_profile
para mostrar los campos adicionales y personal_options_update
para actualizarlos, prueba:
<?php
ob_start();
include_once("../../../wp-load.php");
get_header();
/* Obtener información del usuario */
global $current_user, $wp_roles;
get_currentuserinfo();
/* Cargar archivo de registro */
require_once( ABSPATH . WPINC . '/registration.php' );
/* Si se guardó el perfil, actualizarlo */
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {
/* Actualizar contraseña del usuario */
if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
if ( $_POST['pass1'] == $_POST['pass2'] )
wp_update_user( array( 'ID' => $current_user->id, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
else
$error = __('Las contraseñas que ingresaste no coinciden. Tu contraseña no fue actualizada.', 'profile');
}
/* Actualizar información del usuario */
if ( !empty( $_POST['url'] ) )
update_usermeta( $current_user->id, 'user_url', esc_url( $_POST['url'] ) );
if ( !empty( $_POST['email'] ) )
update_usermeta( $current_user->id, 'user_email', esc_attr( $_POST['email'] ) );
if ( !empty( $_POST['first-name'] ) )
update_usermeta( $current_user->id, 'first_name', esc_attr( $_POST['first-name'] ) );
if ( !empty( $_POST['last-name'] ) )
update_usermeta($current_user->id, 'last_name', esc_attr( $_POST['last-name'] ) );
if ( !empty( $_POST['yim'] ) )
update_usermeta($current_user->id, 'yim', esc_attr( $_POST['yim'] ) );
if ( !empty( $_POST['description'] ) )
update_usermeta( $current_user->id, 'description', esc_attr( $_POST['description'] ) );
//campos adicionales (avatares locales simples...)
do_action('personal_options_update', $current_user->id);
/* Redirigir para mostrar la información actualizada */
if ( !$error ) {
header("Location: ".$_SERVER['PHP_SELF']);
exit;
ob_flush();
}
}
?>
<div id="post-<?php the_ID(); ?>">
<div class="entry-content entry">
<?php the_content(); ?>
<?php if ( !is_user_logged_in() ) : ?>
<p class="warning">
<?php _e('Debes iniciar sesión para editar tu perfil.', 'profile'); ?>
</p><!-- .warning -->
<?php else : ?>
<?php if ( $error ) echo '<p class="error">' . $error . '</p>'; ?>
<form method="post" id="adduser" action="<?php the_permalink(); ?>">
<p class="form-username">
<label for="first-name"><?php _e('Nombre', 'profile'); ?></label>
<input class="text-input" name="first-name" type="text" id="first-name" value="<?php the_author_meta( 'user_firstname', $current_user->id ); ?>" />
</p><!-- .form-username -->
<p class="form-username">
<label for="last-name"><?php _e('Apellido', 'profile'); ?></label>
<input class="text-input" name="last-name" type="text" id="last-name" value="<?php the_author_meta( 'user_lastname', $current_user->id ); ?>" />
</p><!-- .form-username -->
<p class="form-email">
<label for="email"><?php _e('Correo electrónico *', 'profile'); ?></label>
<input class="text-input" name="email" type="text" id="email" value="<?php the_author_meta( 'user_email', $current_user->id ); ?>" />
</p><!-- .form-email -->
<p class="form-url">
<label for="url"><?php _e('Sitio web', 'profile'); ?></label>
<input class="text-input" name="url" type="text" id="url" value="<?php the_author_meta( 'user_url', $current_user->id ); ?>" />
</p><!-- .form-url -->
<p class="form-yim">
<label for="yim">yahoo</label>
<input class="text-input" name="yim" type="text" id="yim" value="<?php the_author_meta( 'yim', $current_user->id ); ?>" />
</p><!-- .form-yim -->
<p class="form-password">
<label for="pass1"><?php _e('Contraseña *', 'profile'); ?> </label>
<input class="text-input" name="pass1" type="password" id="pass1" />
</p><!-- .form-password -->
<p class="form-password">
<label for="pass2"><?php _e('Repetir contraseña *', 'profile'); ?></label>
<input class="text-input" name="pass2" type="password" id="pass2" />
</p><!-- .form-password -->
<p class="form-textarea">
<label for="description"><?php _e('Información biográfica', 'profile') ?></label>
<textarea name="description" id="description" rows="3" cols="50"><?php the_author_meta( 'description', $current_user->id ); ?></textarea>
</p><!-- .form-textarea -->
<?php do_action('show_user_profile',$current_user->id); ?>
<p class="form-submit">
<?php echo $referer; ?>
<input name="updateuser" type="submit" id="updateuser" class="submit button" value="<?php _e('Actualizar', 'profile'); ?>" />
<?php wp_nonce_field( 'update-user' ) ?>
<input name="action" type="hidden" id="action" value="update-user" />
</p><!-- .form-submit -->
</form><!-- #adduser -->
<?php endif; ?>
</div><!-- .entry-content -->
</div><!-- .hentry .post -->
<?php comments_template( '', true ); ?>

Hola, lo pegué pero obtengo el mismo comportamiento que en mi pregunta. Muestra el hombre misterioso, el botón de subir, no mostró el avatar actual y no me dejó cambiarlo. Estoy usando el plugin Simple Local Avatar

Prueba usando este código con un plugin llamado user avatar

Gracias por esto, lo intenté pero tengo los mismos efectos que antes. Además, por alguna razón, cuando hago clic en actualizar me lleva a una página wp-admin/admin-ajax.php?action=user_avatar_add_photo&step=1&uid=&TB_iframe=true&width=720&height=450 que escribe -1 y al eliminar me lleva a wp-admin/profile.php

Me estoy golpeando la cabeza contra la pared, he intentado de todo pero aún no logro que funcione...

Es el mismo enlace cuando accedes a través del frontend o profile.php pero en profile.php se abre un cuadro en línea y tiene la opción de subir una foto. A través del frontend abre una nueva página wp-admin/admin-ajax.php?action=user_avatar_add_photo&step=1&uid=&TB_iframe=true&width=720&height=450
con el valor -1 en ella.

Quizás otro enfoque funcione. He visto perfiles de usuarios implementados y funcionando en el front-end en algún lugar usando el plugin Theme My Login ( http://wordpress.org/extend/plugins/theme-my-login/ ) y User Avatar ( http://wordpress.org/extend/plugins/user-avatar/ );
También puedes encontrar más información aquí http://wordpress.org/support/topic/custom-edit-profile-page .

Prueba esta solución que "Fask" realizó utilizando el plugin user-photo.
Desplázate hacia abajo y busca la publicación de Fask.
