Cómo hacer un formulario de registro en WordPress

Para los que quieran emprender el viaje de crear su propio formulario de registro de usuarios en WordPress, les prepare un tutorial para que puedan realizarlo.

¿Para que hacerlo?

Esto puede ser una decisión personal, ya que perfectamente podemos utilizar el formulario que viene por defecto en WP, pero para aquellos que buscan personalizar al 100% su sitio, este es uno de los pasos que deben tomar.

Preparando el equipaje

Para empezar este viaje, comenzaremos con lo básico, que será abrir nuestro IDE (editor) y crear una nueva página PHP que le pondremos de nombre registro.php (puede ser el que se los ocurra, siempre respetando los nombres de archivos reservados por WP).

Ya creado, llamaremos al header, footer y además indicaremos que se trata de una página.

<?php
# Template name: Registro
get_header();
get_footer();

Con el comentario # Template name, lo que estamos haciendo es decirle a WP de que esto es una page y que su nombre es Registro, que será como lo identificaremos más adelante.

Ahora que tenemos el archivo creado y ya con lo básico escrito en él, pasaremos a la siguiente etapa.

Empezando el viaje

Empezaremos con lo básico, que será la creación de nuestro formulario, en mi caso lo haré con un estilo básico, ya que lo que buscamos en este tutorial es ver la parte de programación y no la creación de un estilo.

<form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
 <label for="nombre">Nombre de usuario <input type="text" name="usuario" id="nombre" /></label>
 <?php echo $empty_user; echo $exist_user; echo $invalid_user;?>
 <label for="email">Correo electrónico <input type="text" name="email" id="email" /></label>
 <?php echo $invalid_mail; echo $exist_mail;?>
 <label for="password">Contraseña <input type="password" name="password" id="password" /></label>
 <?php echo $password_error;?>
 <button type="submit" name="registro">Registrame!</button>
</form>

Bueno, lo que escribi aquí no tiene mucha ciencia! cualquiera que este tratando de hacer esto debería entender lo que significa

Evitando turbulencias

Pasaremos a la parte más importante del tutorial, que es hacer posible el registro del usuario y también hacerlo seguro de los bravucones de la red.

<?php
if(isset($_POST['registro']))
{
 $usuario = $_POST['usuario'];
 $email = $_POST['email'];
 $password = $_POST['password'];
if(strlen( $usuario ) < 4) {
 // Comprobamos que el nombre de usuario más de 4 caracteres
 $error = true;
 $empty_user = 'Hey! No ingresaste ningún nombre de usuario';
 }
if(!is_email( $email ))
 {
 // is_email() es una función de WP que chequea si el string tiene el formato de un email
 $error = true;
 $invalid_mail = 'Ups! el correo que ingresaste no es válido';
 }
if(email_exists( $email ))
 {
 // email_exists() verifica en la BD si el email ingresado se encuentra registrado
 $error = true;
 $exist_mail = 'Ups! el correo que ingresaste ya se encuentra registrado';
 }
if(username_exists( $usuario ))
 {
 // username_exists() verifica en la BD si el nombre de usuario ingresado se encuentra ocupado
 $error = true;
 $exist_user = 'Ups! al parecer el nombre de usuario que elegiste ya esta ocupado';
 }
if(!validate_username( $usuario ))
 {
 // validate_username() verifica que el nombre de usuario no tenga ningún caracter extraño
 $error = true;
 $invalid_user = 'Ups! al parecer ingresaste un nombre de usuario inválido';
 }
if(strlen( $password ) < 8 && strlen( $password ) > 16)
 {
 // Con strlen() verificamos que la cantidad de caracteres de la contraseña debe ser entre 8 y 16 caracteres
 $error = true;
 $password_error = 'Hey! La contraseña debe tener entre 8 y 16 caracteres';
 }
// Si la variable (string) $error se encuentra vacía quiere decir que no hubo ningún error, entonces ejecuta el código para registrar al usuario.
 if(empty( $error ))
 {
 // Con sanitize_email() nos encargamos de limpiar el correo solamente por las dudas
 $email = sanitize_email($email);
 // Lo mismo hacemos con el nombre de usuario usando la función sanitize_user() de WP
 $usuario = sanitize_user($usuario);
// Creamos un array pasando los datos que necesitaremos para crear el nuevo usuario
 $userdata = array(
 'user_pass' => $password,
 'user_email' => $email,
 'user_login' => $usuario
 );
// wp_insert_user() agrega el nuevo usuario a WP
 wp_insert_user($userdata);
// get_user_by() lo utilizamos para obtener el ID del usuario recién creado que lo necesitaremos para wp_new_user_notification()
 $get_userdata = get_user_by('email', $email);
 // Con wp_new_user_notification() enviamos un correo al usuario que recién se registro, pasandole su nombre de usuario y contraseña. Además nos avisará cada vez que un usuario se registre
 wp_new_user_notification($get_userdata->id, $password);
 }
}
?>

La tarea de cada función esta explicada en los comentarios del código

Llegando a destino

Con eso ya tenemos nuestra página de registro, ahora lo que nos falta hacer es agregarla, para eso debemos ir a Páginas -> Añádir nueva, en título agregamos el nombre “Registro” y en la caja “Atributos de página” seleccionamos la plantilla “Registro”.

Enmarqué en los cuadros rojos lo que deben configurar

Las fotos del viaje

Aquí les dejo el código completo para que lo puedan copiar

<?php
# Template name: Registro
get_header();
if(isset($_POST['registro']))
{
 $usuario = $_POST['usuario'];
 $email = $_POST['email'];
 $password = $_POST['password'];
if(strlen( $usuario ) < 4) {
 // Comprobamos que el nombre de usuario más de 4 caracteres
 $error = true;
 $empty_user = 'Hey! No ingresaste ningún nombre de usuario';
 }
if(!is_email( $email ))
 {
 // is_email() es una función de WP que chequea si el string tiene el formato de un email
 $error = true;
 $invalid_mail = 'Ups! el correo que ingresaste no es válido';
 }
if(email_exists( $email ))
 {
 // email_exists() verifica en la BD si el email ingresado se encuentra registrado
 $error = true;
 $exist_mail = 'Ups! el correo que ingresaste ya se encuentra registrado';
 }
if(username_exists( $usuario ))
 {
 // username_exists() verifica en la BD si el nombre de usuario ingresado se encuentra ocupado
 $error = true;
 $exist_user = 'Ups! al parecer el nombre de usuario que elegiste ya esta ocupado';
 }
if(!validate_username( $usuario ))
 {
 // validate_username() verifica que el nombre de usuario no tenga ningún caracter extraño
 $error = true;
 $invalid_user = 'Ups! al parecer ingresaste un nombre de usuario inválido';
 }
if(strlen( $password ) < 8 && strlen( $password ) > 16)
 {
 // Con strlen verificamos que la cantidad de caracteres de la contraseña debe ser entre 8 y 16 caracteres
 $error = true;
 $password_error = 'Hey! La contraseña debe tener entre 8 y 16 caraceteres';
 }
// Si la variable (string) $error se encuentra vacia quiere decir que no hubo ningún error, entonces ejecuta el código para registrar al usuario.
 if(empty( $error ))
 {
 // Con sanitize_email() nos encargamos de limpiar el correo solamente por las dudas
 $email = sanitize_email($email);
 // Lo mismo hacemos con el nombre de usuario usando la función sanitize_user() de WP
 $usuario = sanitize_user($usuario);
// Creamos un array pasando los datos que necesitaremos para crear el nuevo usuario
 $userdata = array(
 'user_pass' => $password,
 'user_email' => $email,
 'user_login' => $usuario
 );
// wp_insert_user() agrega el nuevo usuario a WP
 wp_insert_user($userdata);
// get_user_by() lo utilizamos para obtener el ID del usuario recién creado que lo necesitaremos para wp_new_user_notification()
 $get_userdata = get_user_by('email', $email);
 // Con wp_new_user_notification() enviamos un correo al usuario que recién se registro, pasandole su nombre de usuario y contraseña. Además nos avisará cada vez que un usuario se registre
 wp_new_user_notification($get_userdata->id, $password);
 }
}
?>
<form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
 <label for="nombre">Nombre de usuario <input type="text" name="usuario" id="nombre" /></label>
 <?php echo $empty_user; echo $exist_user; echo $invalid_user;?>
 <label for="email">Correo electrónico <input type="text" name="email" id="email" /></label>
 <?php echo $invalid_mail; echo $exist_mail;?>
 <label for="password">Contraseña <input type="password" name="password" id="password" /></label>
 <?php echo $password_error;?>
 <button type="submit" name="registro">Registrame!</button>
</form>
<?php get_footer();?>
Modificado por última vez el día 20 de noviembre de 2012 a las 18:44
  • Hola, en que carpeta debo guardar los archivos?

  • Hola , me ha servido y no he tenido problemas en aplicarlo. Lo que me gustaría agregarle es que muestre un mensaje de USUARIO CREADO SATISFACTORIAMENTE, o que pueda redireccionar a una pagina donde se le indique al usuario que el registro fue exitoso. Como sería? Gracias

  • Mil gracias!!! He estado 2 días como loca buscando una solución hasta que encontré tu post.

  • Muchas gracias, gran trabajo!!!!!!. Tengo una duda si quiero hacer un widget del registro para poder ubicarlo en el header.

    Muchas gracias.

  • en la parte de atributos no me aparece la opción plantillas ¿?
    y también no se en que directorio debo alojar el archivo registro.php

  • Lo siento pero no he conseguido hacer nada. Es un buen tutorial, pero lo elevas a un nivel más adentrado en el .php.
    No sabía crear el .php, ni dónde pegar el código de ”Empezando el viaje”. Cuando he conseguido pegar el código grande y crear la plantilla en la página ha salido sin fondo y desordenados los 3 campos de texto y el botón de registro.
    Por otro lado en el texto de la página he creado otro código más personalizado(añadiendo campos, nada que merezca premio) pero no aparece en la página ”Registro” pues salen siempre los 3 campos y el botón.

    Creo que la gente que lo comprende ya sabe hacerlo. ¿Podrías explicarlo un poco más para… novatos?

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>