Crear formulario de registro de usuarios en WordPress

16 jul 2014, 17:43:41
Vistas: 14.6K
Votos: 0

Tengo una página con un formulario llamada Test Form con este formulario:

<div id="container">
<form action="wp-content/themes/max-magazine/TestForm.php" method="post" name="myForm">
Usuario <input type="text"  name="uname" />
Email  <input id="email" type="text" name="uemail" />
Contraseña  <input type="password"  name="upass" />
<input type="submit" value="Enviar" /></form>
</div>

Y en el backend tengo un archivo php llamado TestForm.php

<?php 
function crear_cuenta(){
$usuario = 'IDdeCuenta';
$contraseña = 'ContraseñaDeCuenta';
$email = 'email@dominio.com';
if ( !username_exists( $usuario )  && !email_exists( $email ) ) {
    $id_usuario = wp_create_user( $usuario, $contraseña, $email );
    $usuario = new WP_User( $id_usuario );
    $usuario->set_role( 'contributor' );
} 
}
add_action('init','crear_cuenta');
?>

Si esta función está definida en functions.php funciona correctamente y crea el usuario, pero la misma función en TestForm.php no funciona. Por favor ayuda.

También obtendré los datos del formulario así:

<?php
$usuario = $_POST['uname'];
$contraseña = $_POST['upass'];
$email = $_POST['uemail'];
?>
0
Todas las respuestas a la pregunta 1
11

Estás enviando los datos del formulario directamente al archivo TestForm.php, que es un script PHP fuera de la lógica de WordPress. Es un script independiente. Podrías establecer el atributo action del formulario como una cadena vacía, de esta manera los datos del formulario se envían a la misma página que contiene el formulario, que es parte de WordPress:

<div id="container">
    <form method="post" name="myForm">
        Usuario <input type="text"  name="uname" />
        Correo  <input id="email" type="text" name="uemail" />
        Contraseña  <input type="password"  name="upass" />
        <input type="submit" value="Enviar" />
    </form>
</div>

En este caso, los datos del formulario se envían a una página de WordPress y se activa el add_action('init','create_account'); si lo agregas al archivo functions.php, por ejemplo así:

add_action('init','create_account');
function create_account(){
    //Puedes necesitar validación de datos aquí
    $user = ( isset($_POST['uname']) ? $_POST['uname'] : '' );
    $pass = ( isset($_POST['upass']) ? $_POST['upass'] : '' );
    $email = ( isset($_POST['uemail']) ? $_POST['uemail'] : '' );

    if ( !username_exists( $user )  && !email_exists( $email ) ) {
       $user_id = wp_create_user( $user, $pass, $email );
       if( !is_wp_error($user_id) ) {
           //usuario creado
           $user = new WP_User( $user_id );
           $user->set_role( 'contributor' );
           //Redirección
           wp_redirect( 'URL_donde_quieres_redirigir' );
           exit;
       } else {
           //$user_id es un objeto WP_Error. Maneja el error
       }
    }

}

P.D.: Te sugiero que uses un marcado de formulario HTML5 moderno y tipos de input actualizados

16 jul 2014 18:45:54
Comentarios

¿Entonces no puedo crear la página TestForm.php?

Gaurav Gaurav
16 jul 2014 18:57:49

Entonces el problema es cómo obtener los valores de usuario, email y contraseña en functions.php desde el formulario myForm?

Gaurav Gaurav
16 jul 2014 18:58:40

Tienes acceso a $_POST dentro de la función create_account(), así que obtienes los valores como lo harías con cualquier otro formulario en PHP. Y puedes crear TestForm.php pero tendrás que cargar el motor de Wordpress en ese archivo, lo cual realmente creo que no quieres hacer.

cybmeta cybmeta
16 jul 2014 19:07:33

¿Y dónde estoy definiendo esta función? ¿Está en functions.php? ¿O en TestForm.php?

Gaurav Gaurav
16 jul 2014 19:09:09

En functions.php

cybmeta cybmeta
16 jul 2014 19:10:11

¿Entonces quieres decir que debo hacerlo en functions.php? ¿Entonces cómo sabrá el formulario a qué archivo PHP necesita responder? ¿Y qué pasa si necesito redirigirlo a otra página cuando el registro sea exitoso?

Gaurav Gaurav
16 jul 2014 19:11:11

¿Entonces cómo redirigir a otra página en caso de éxito?

Gaurav Gaurav
16 jul 2014 19:11:43

Usa wp_redirect. Creo que estás confundiendo la URL con la ubicación del script PHP.

cybmeta cybmeta
16 jul 2014 19:13:14

Por favor, ¿puedes decirme dónde poner ese wp_redirect?

Gaurav Gaurav
16 jul 2014 19:24:40

Coloca wp_redirect donde quieras que se ejecute, obviamente. Por ejemplo, si quieres que se ejecute después de un wp_create_user exitoso, ponlo después de verificar que wp_create_user haya creado un usuario correctamente. Mira la respuesta editada. Creo que tu pregunta sobre "Crear un formulario de registro de usuario en WordPress" ya está respondida, preguntas más específicas deberían hacerse en nuevas preguntas, por ejemplo, ¿cómo usar wp_redirect? Si no, podemos tener una discusión interminable aquí.

cybmeta cybmeta
16 jul 2014 19:31:52

Sugeriría añadir algunas verificaciones isset() a los datos de $_POST. De lo contrario, podrías ver advertencias de PHP.

helgatheviking helgatheviking
16 jul 2014 19:56:15
Mostrar los 6 comentarios restantes