Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Iniciar y abandonar sesión en WordPress mediante formulario, sin usar el panel de administración

Imago voragine.net

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 archivo header.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

Dejar un comentario

*
*

 

Un trackback