Hace tiempo explicábamos cómo añadir usuarios a WordPress sin pasar por el panel de administración, mediante un formuario que insertaba los usuarios directamente en la base de datos. Para permitir a un usuario iniciar o abandonar su sesión, una vez registrado, hay que introducir dos formularios, uno por cada acción, y que cada uno llame a la función adecuada de WordPress. Por último hay que contemplar la página en la que aterriza el usuario que acaba de iniciar sesión, o salir de ella.
Para montar un sistema completo de incio y abandono de sesión necesitaremos unos cuantos archivos que colocaremos en la carpeta del theme que estemos usando:
- Alojar en un archivo el formulario para iniciar sesión, y el formulario para abandonar sesión, por ejemplo en
user-forms.php
- Insertar en otro archivo las acción para iniciar y abandonar sesión, por ejemplo, en
user.php
. Este paso no es extrictamente necesario, pero hace que tengamos todo el código relativo a gestión de usuarios controlado en el mismo archivo, cuestión de orden. - Llamar al archivo
user.php
desde el archivoheader.php
para que así las acciones de se ejecuten antes de cargar las cabeceras de la página y podamos redirigir convenientemente a la URL que queramos, y llamar al archivo user-forms.php desde el lugar en el que deseemos que aparezcan los formularios.
Formularios, user-forms.php
$bloghome = get_bloginfo( 'url' ); // la URL que contendrá la acción es la propia página que contiene el formulario $action_slug = $wp_query ->query_vars[ 'name' ]; // alojamos el formulario en una variable para poder llamarlo donde queramos $login_form = '</pre> <form id= "login" action= "' .$bloghome. '/' .$action_slug. '" method= "post" name= "login" > <fieldset><input id= "login-username" type= "text" name= "login-username" value= "" /> <label>Username</label></fieldset> <fieldset><input id= "login-pass" type= "password" name= "login-pass" value= "" /> <label>Password</label></fieldset> <fieldset><input id= "login-remember" type= "checkbox" name= "login-remember" value= "false" /> <label>Remember me?</label></fieldset> <fieldset><input id= "login-ref" type= "hidden" name= "login-ref" value= "' .$ref. '" /> <input id= "login-submit" type= "submit" name= "login-submit" value= "Login" /></fieldset> </form> <pre> <!-- #login --> '; // alojamos el formulario en una variable para poder llamarlo donde queramos $logout_form = '</pre> <form id= "logout" action= "' .$bloghome. '/' .$action_slug. '" method= "post" name= "logout" > <fieldset><input id= "logout-ref" type= "hidden" name= "logout-ref" value= " .$ref. " /> <input id= "logout-submit" type= "submit" name= "logout-submit" value= "Log out" /></fieldset> </form> <pre> <!-- #logout --> '; // creamos una sentencia para desplegar uno u otro // en función de si el usuario ha iniciado sesión if ( is_user_logged_in() ) { echo $logout_form ; } else { echo $login_form ; } |
Acciones para iniciar sesión, user.php
// si la variable login submit se creó significa que // se envió la acción para iniciar sesión desde el formulario if ( isset( $_POST [ 'login-submit' ]) ) { // para saber dónde redirigir una vez ejecutado el inicio de sesión $redirect = $_POST [ 'login-ref' ]; // matriz que contiene los datos necesarios para iniciar sesión $creds = array (); $creds [ 'user_login' ] = $_POST [ 'login-username' ]; $creds [ 'user_password' ] = $_POST [ 'login-pass' ]; $creds [ 'remember' ] = $_POST [ 'login-remember' ]; // ejecutamos el inicio de sesión $user = wp_signon( $creds , false ); if ( is_wp_error( $user ) ) { // si hay algún error // hacemos echo del mensaje echo $user ->get_error_message(); } else { // si todo es correcto // redirigimos de nuevo a la página en la que estaba el usuario header( "location: " . $redirect ); } } |
Acciones para abandonar sesión
// si el usuario ha iniciado sesión y la variable logout-submit se creó // significa que se envió la acción para abandonar sesión desde el formulario if ( is_user_logged_in() && isset( $_POST [ 'logout-submit' ]) ) { // para saber dónde redirigir una vez ejecutado el inicio de sesión $redirect = $_POST [ 'logout-ref' ]; // ejecutamos el abandono de sesión wp_logout(); // redirigimos de nuevo a la página en la que estaba el usuario header( "location: " . $redirect ); |
1 comentario