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