Visto como se crea un Widget en WordPress aquí, vamos a definir su contenido para establecer un zona de LogIn en WordPress.

Lo que queremos que haga esta zona del widget es pedir a través de un formulario el usuario y contraseña, si el usuario no está registrado habilitamos un botón para acceder a la página de registro. En el caso de que el usuario ya haya iniciado sesión dentro de la página presentaremos su información de la base de datos dentro del mismo widget y un botón para salir de la sesión

Podemos hacerlo de dos formas distintas. Una de ellas es crear un diseño específico utilizando elementos de formulario propios o de otros frameworks. La otra manera es usar las funciones que proporciona WordPress para iniciar sesión y acceder al registro de usuario. Esta segunda es la que utilizaremos para ir rápidos.

A continuación presento el código de creación del Widget y explicaré el uso de cada función.


/**
* LogIn Class
*/
class LogIn extends WP_Widget {
   /** constructor */
   function LogIn() {
      parent::WP_Widget(false, $name = 'LogIn');
   }

   function widget($args, $instance) {
      extract( $args );
      $title = apply_filters('widget_title', $instance['title']);
      ?>
      <?php echo $before_widget; ?>
      <?php if ( $title ) echo $before_title . $title . $after_title; ?>

      <?php
      if ( !is_user_logged_in() ) {
         $args = array(
         'echo' => true,
         'form_id' => 'loginform',
         'label_username' => __( 'Username' ),
         'label_password' => __( 'Password' ),
         'label_remember' => __( 'Remember Me' ),
         'label_log_in' => __( 'Log In' ),
         'id_username' => 'user_login',
         'id_password' => 'user_pass',
         'id_remember' => 'rememberme',
         'id_submit' => 'wp-submit',
         'remember' => true,
         'value_username' => NULL,
         'value_remember' => false
         );
         wp_login_form( $args );
         echo '<a href="'.wp_registration_url().'">Regístrate</a>';
      }else{
         echo 'Logged In<br>';

         $current_user = wp_get_current_user();

         echo 'Username: ' . $current_user->user_login . '<br />';
         echo 'User email: ' . $current_user->user_email . '<br />';
         echo 'User first name: ' . $current_user->user_firstname . '<br />';
         echo 'User last name: ' . $current_user->user_lastname . '<br />';
         echo 'User display name: ' . $current_user->display_name . '<br />';
         echo 'User ID: ' . $current_user->ID . '<br />';

         $redirect=$_SERVER['PHP_SELF'];
         wp_loginout( $redirect);
      }
      ?>

      <?php echo $after_widget; ?>
   <?php
   }

   function update($new_instance, $old_instance) {
      $instance = $old_instance;
      $instance['title'] = strip_tags($new_instance['title']);
      return $instance;
   }

   function form($instance) {
       $title = esc_attr($instance['title']);
   ?>
      <p>
         <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>"
            name="<?php echo $this->get_field_name('title'); ?>"
            type="text" value="<?php echo $title; ?>" />
         </label>
      </p>
   <?php
   }

} // clase LogIn

// registrar el widget LogIn
   add_action('widgets_init', create_function('', 'return register_widget("LogIn");'));

Nos centraremos en la función Widget que será donde definiremos qué se visualizará en cada caso.
Para empezar estableceremos un condicional is_user_logged_in() para saber si ya hay una sesión abierta. En caso de que no exista sesión escribimos el formulario de logueo. Para ello ya existe otra función; wp_login_form(). En esta función se han de definir unos argumentos para determinar nuestras necesidades. En mi caso el diseño de este formulario estaba poco definido por la plantilla, por lo que he tenido que ajustar algunas opciones de estilo en el css para que sea más estético y homogéneo.

En el caso de que el usuario no esté registrado, creamos un acceso a la página de registro de WordPress típica mediante wp_registration_url(). Aquí debemos prestar atención al tener activada la opción de que cualquier persona puede registrarse en el menú Settings -> General.

Si ya hay una sesión de usuario activa leemos la información desde la base de datos por medio de wp_get_current_user() y la visualizamos.
Finalmente creamos un enlace para cerrar la sesión con wp_loginout() con una redirección a la página de inicio.

Con estas bases ya podemos desarrollar nuestro sistema de gestión de usuarios de una forma rápida. El siguiente paso a tener en cuenta sería buscar una restricción a la creación de usuarios, ya que una misma persona podría crear 10000 usuarios y petar la tabla con registros inútiles. O borrar automáticamente las cuentas inactivas, en fin lo que se os ocurra.