Guardar datos personalizados para cada usuario

11 feb 2011, 11:16:55
Vistas: 14.3K
Votos: 7

Permito a los usuarios guardar algunas notas en mi sitio WordPress. Solo pueden hacer esto después de iniciar sesión en el sitio.

Ahora quiero guardar sus notas en una tabla de base de datos y asociarlas con el ID del usuario, es decir, si un usuario ha guardado 2 notas, cuando inicie sesión y vaya a "mi página", debería poder ver las 2 notas que guardó.

¿Alguien puede orientarme sobre cómo hacer esto? Encontré mucha información sobre guardar metadatos personalizados del usuario cuando se registran. Pero no pude encontrar ayuda sobre guardar información asociada a una cuenta de usuario después de que hayan iniciado sesión.

Gracias.

0
Todas las respuestas a la pregunta 1
4

Echa un vistazo a update_user_meta puedes guardar datos del usuario tanto si se está registrando como si ya ha iniciado sesión, solo es cuestión de qué ID de usuario le pasas.

Por ejemplo, en tu función para guardar los datos del usuario después de que haya iniciado sesión:

function save_user_data_7231(){
    global $current_user;
    if is_user_logged_in{ //verifica si el usuario ha iniciado sesión
        if (isset($_POST['Notes'])){
            // obtiene la información del usuario actual
            get_currentuserinfo();
            $old_notes = get_user_meta($current_user->ID, 'user_notes', true);
            if (isset($old_notes)&& is_array($old_notes)){
                //si ya hemos guardado más de una nota
                $old_notes[] = $_POST['Notes'];
                update_user_meta( $current_user->ID, 'user_notes', $old_notes);
            }
            if (isset($old_notes)&& !is_array($old_notes)){
                //si solo habíamos guardado una nota antes
                $new_notes = array($old_notes,$_POST['Notes']);
                update_user_meta( $current_user->ID, 'user_notes', $new_notes)
            }
            if (!isset($old_notes)){
                //primera nota que guardamos para este usuario
                update_user_meta( $current_user->ID, 'user_notes', $_POST['Notes'])
            }
        }
    } 
}

Para mostrar las notas puedes usar get_user_meta

function get_user_notes_654(){
    global $current_user;
    if is_user_logged_in{ //verifica si el usuario ha iniciado sesión
        // obtiene la información del usuario actual
        get_currentuserinfo();
        $old_notes = get_user_meta($current_user->ID, 'user_notes', true);
        if (!isset($old_notes)){
            $re = '¡Aún no hay notas!';
        }
        if (isset($old_notes)){//tenemos notas. Se eliminó el ! extra aquí.
            if (is_array($old_notes)){//más de una
                foreach($old_notes as $note){
                    $re .= '<strong>nota:</strong>' . $note . '<br />'; 
                }
            }else{//solo una
                $re = '<strong>nota:</strong>' . $old_notes . '<br />';
            }
        }
        re .='//aquí iría el formulario para añadir notas';
        return $re;
    }
}

Espero que esto te ayude

11 feb 2011 11:55:50
Comentarios

gracias. ¿qué pasa si quiero guardar datos que no son cadenas de texto, como archivos por ejemplo?

lostInTransit lostInTransit
11 feb 2011 12:00:17

guardar archivos implicaría procesar la subida y guardar el ID del adjunto, que puede guardarse como una cadena de texto. también, si solo guardas la URL del archivo después de subirlo, sigue siendo una cadena de texto.

Bainternet Bainternet
11 feb 2011 12:02:52

@Bainternet sé que este hilo es antiguo pero me ayuda. Solo una pregunta: no he establecido una nota y aún así $old_notes = get_user_meta($current_user->ID, 'user_notes', true); echo 'old notes ' . isset($old_notes); devuelve un 1, ¿esto debería ser 0/false, verdad?

alex alex
10 sept 2014 11:24:02

Ok, edité un poco tu código if (!isset($old_notes[0])) { parece funcionar como esperaba. ¿$old_notes siempre tiene un array como valor?

alex alex
10 sept 2014 18:36:38