Subir avatar desde el frontend

11 ago 2011, 14:20:51
Vistas: 16.7K
Votos: 2

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.

2
Comentarios

Tengo un proyecto similar en el que trabajaré en un par de días. Te avisaré si se me ocurre algo.

Sisir Sisir
17 ago 2011 11:52:11

¿Alguien ha encontrado alguna solución para esto?

Nick Budden Nick Budden
9 nov 2011 22:44:46
Todas las respuestas a la pregunta 3
8

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 ); ?>
11 ago 2011 19:59:11
Comentarios

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

EnexoOnoma EnexoOnoma
12 ago 2011 00:16:25

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

Bainternet Bainternet
12 ago 2011 00:45:24

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&heigh‌​t=450 que escribe -1 y al eliminar me lleva a wp-admin/profile.php

EnexoOnoma EnexoOnoma
12 ago 2011 03:49:06

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

EnexoOnoma EnexoOnoma
12 ago 2011 18:40:24

¿De dónde estás obteniendo la llamada Ajax? Pega un enlace

Bainternet Bainternet
12 ago 2011 19:19:25

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&heigh‌​‌​t=450 con el valor -1 en ella.

EnexoOnoma EnexoOnoma
12 ago 2011 20:25:04

¿conoces alguna posible razón/solución para esto?

EnexoOnoma EnexoOnoma
17 ago 2011 04:48:51

¿para qué es el OB?

Bainternet Bainternet
17 ago 2011 09:17:25
Mostrar los 3 comentarios restantes
1

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 .

15 ago 2011 13:05:19
Comentarios

Me encontré con esto pero necesito hacerlo sin usar más plugins que avatar. Creo que también necesita campos adicionales de usuario de Cimy para funcionar.

EnexoOnoma EnexoOnoma
15 ago 2011 14:37:51
0

Prueba esta solución que "Fask" realizó utilizando el plugin user-photo.

Desplázate hacia abajo y busca la publicación de Fask.

17 ago 2011 08:21:14