htmlcss.fr Des tutos ou tutoriels Wordpress, html, php ou javascript.

Plugin WordPress : Last User Login

P

Il y a quelques temps, on m’a demandé d’ajouter une petite fonctionnalité à WordPress: un widget sur le tableau de bord pour voir les dates de connexion des utilisateurs.
Rien de bien méchant mais on y trouve des notions sympa pour modifier le backoffice de WordPress.
On peut facilement modifier le code pour ajouter d’autres informations ou traiter les infos différemment.
Je partage donc une version très simplifiée du code sous forme de mini plugin.

Création du plugin

La première chose à faire est de créer un dossier dans wp-content/plugins. Ce dossier doit avoir le même nom que le fichier du plugin. Dans notre exemple nous allons nommer le dossier « last-user-login ».
Ensuite nous allons créer un fichier  » last-user-login.php » dans ce même dossier et y ajouter le code suivant:

<?php
/*
Plugin Name: Last user login
Plugin URI: http://old.htmlcss.fr
Description: Permet d'afficher les dates des dernières connexions des utilisateurs sur le tableau de bord.
Author: François Riant
Version: 0.1
Author URI: http://old.htmlcss.fr
*/

Rien qu’avec ce code, vous avez quelque chose qui apparaît dans les extensions de WordPress.

Enregistrer la date de connexion

Avant de pouvoir afficher une information, il faut l’avoir!
Nous allons donc commencer par stocker la date et l’heure de connexion pour chaque utilisateur dans une nouvelle variable.
Pour cela nous allons utiliser le hook « wp_login » pour mettre à jour la nouvelle variable; que nous allons nommer « lul_last_login« .
Voici la code à ajouter:

//Capture la date de connexion de l'utilisateur et l'enregistre au format timestamp dans une nouvelle donnée meta.
add_action( 'wp_login', 'lul_savedate', 10, 2);
function lul_savedate( $user_login, $user )
{
    update_user_meta( $user->ID, 'lul_last_login', time() );
}

Petite explication

Ici, la ligne suivante

add_action( 'wp_login', 'lul_savedate' );

Signifie que nous allons lancer la fonction « lul_savedate » Quand quelqu’un se connecte.

Maintenant la ligne

update_user_meta( $user->ID, 'lul_last_login', time() );

La fonction lancée par le hook ‘wp_login’ accepte deux paramètres. Le premier est le pseudo de l’utilisateur et le deuxième est un objet qui contient les informations de l’utilisateur, dont l’ID.
Nous allons utiliser cette ID pour mettre à jour les informations de l’utilisateur grâce à la fonction « update_user_meta » qui accepte plusieurs paramètres.

Nous lui donnons l’identifiant de l’utilisateur, l’ID, le nom de la variable à mettre à jour puis la valeur de cette même variable.
Il faut savoir que si la variable n’existe pas, elle est ajoutée.

Afficher le widget sur le tableau de bord

Ici nous allons utiliser le hook « wp_dashboard_setup » . Ce hook donne accès aux options de personnalisation liées au tableau de bord. Ce hook est notamment utilisé pour ajouter ou supprimer des widgets de tableau de bord de WordPress. Ça tombe bien et voici ce que ça donne:

add_action('wp_dashboard_setup', 'lul_add_widget');
function lul_add_widget()
{
    wp_add_dashboard_widget('lul_widget_user_info', 'Dernière connexion des utilisateurs','lul_render_widget');
}

Comme précédemment, notre hook appelle une fonction « lul_add_widget ». Et cette fonction lance « wp_add_dashboard_widget » qui prends plusieurs paramètres qui sont:

  • Un identifiant, ici j’ai choisi « lul_widget_user_info »
  • Un titre
  • Le nom de la fonction à lancer pour afficher le widget

Passons aux choses sérieuses

Le widget va contenir un tableau de la liste de tous les utilisateurs en affichant leur nom, leur rôle et la date de connexion. Dans un premier temps, il faut récupérer la liste des utilisateurs grâce à « get_users » que nous gardons dans la variable $user_list.
N’hésitez pas consulter la documentation si vous souhaitez modifier les argument passés à get_users.

function lul_render_widget()
{
  $args = [
      'role__in' => ['administrator', 'editor', 'author', 'contributor', 'subscriber'],
      'orderby' => 'login',
      'order' => 'ASC',
  ];
  $user_list = get_users($args);
}

Maintenant nous allons ajouter la partie HTML et les résultats de notre requête conservé dans $user_list. Ici nous utiliserons un simple tableau HTML.

function lul_render_widget()
{
  $args = [
      'role__in' => ['administrator', 'editor', 'author', 'contributor', 'subscriber'],
      'orderby' => 'login',
      'order' => 'ASC',
  ];
  $user_list = get_users($args);
  ?>
    <table class="lul_user_table" cellspacing="0">
    <thead>
        <tr>
            <td width="33.3333%"><strong>Utilisateur</strong></td>
            <td width="33.3333%"><strong>Rôle</strong></td>
            <td width="33.3333%"><strong>Dernière connexion</strong></td>
        </tr>
        <thead>
        <tbody>
            <?php
                foreach ($user_list as $key => $user) :
                    $user_id = $user->data->ID;
                    $user_name = $user->data->display_name;
                    $user_role = $user->roles;
                    $last_date = lul_get_user_last_login($user_id);
            ?>
            <tr>
                <td width="33.3333%"><?= $user_name ?></td>
                <td width="33.3333%"><?= $user_role[0] ?></td>
                <td width="33.3333%"><?= $last_date ?></td>
            </tr>
            <?php
                endforeach;
            ?>
        </tbody>
    </table>
    <?php
}

Ici nous bouclons sur le résultât pour afficher les informations et nous appelons « lul_get_user_last_login » pour récupérer la nouvelle variable que nous avons créé précédemment. Voici le code de cette fonction:

function lul_get_user_last_login($user_id)
{
    $last_login = get_user_meta($user_id, 'lul_last_login');
    if (empty($last_login)) {
        return 'jamais';
    } else {
        $the_login_date = strftime('Le %d %B %Y à %Hh%M', $last_login[0]);
        $time_in_utf8 = iconv(mb_detect_encoding($the_login_date, mb_detect_order(), true), "UTF-8", $the_login_date);
        return $time_in_utf8;
    }
}

Petite explication

Nous commençons par récupérer la variable avec « get_user_meta« .
Puis si la variable n’est pas vide, nous traitons sa valeur pour avoir un affichage compréhensible sous la forme Jour mois année heure minute.
La variable est stockée via la fonction « time » de PHP.
Nous utiliserons donc les fonctions PHP suivantes pour traiter l’information

Dans certain il est nécessaire de définir le format de la local pour que PHP affiche la date en français. Cela peut être fait en ajoutant le code suivant. Mais méfiez-vous, WordPress gère déjà ce genre de paramètre, vérifiez à deux fois si vous l’ajoutez.

setlocale(LC_TIME, 'fr_FR.utf8','fra');

Vous pouvez télécharger le plugin ici même.

htmlcss.fr Des tutos ou tutoriels Wordpress, html, php ou javascript.

François Riant

Je m’appelle François Riant. Je travail dans les métiers du web depuis 2006. Mon expérience m’a amené à changer plusieurs fois de technologie.

Aujourd’hui je cherche à partager mon expérience et j’y trouve du de plaisir. Je travail actuellement chez W2P Digital.
Je ne prends donc pas de mission en freelance.

Si vous avez une remarque ou une question; vous pouvez me joindre sur francois.riant@gmail.com