Et si vous vous mettiez en tête de partager les utilisateurs de vos sites WordPress entre eux ? Un peu à la manière de Google. En effet, la célèbre firme de Mountain View permet d’accéder à tous ses services avec une seule inscription. D’ailleurs, cette inscription se réalise depuis n’importe lequel de ces services.
Eh bien, j’ai une bonne nouvelle ! Car oui, on peut réaliser une architecture semblable dans un environnement WordPress ! Et les raisons de partager ses utilisateurs sur plusieurs sites WordPress sont nombreuses ! Voyons donc comment faire !
Familiarisez-vous avec la base de données et les fichiers importants
Avant toute chose, il est important de connaître les principaux rouages du processus. En effet, chaque fois qu’un utilisateur s’inscrit sur votre site web, ses informations s’enregistrent en base de données. Sur WordPress, deux tables sur les douze installées par défaut stockent ces informations. Il s’agit de wp_users et wp_usermeta (si vous n’avez pas modifié le préfixe de vos tables).
Pour vous en rendre compte, je vous invite à explorer votre base de données via phpmyadmin avec les identifiants fournis par votre hébergeur. La base de données d’une installation basique de WordPress doit ressembler à ça.
Connaître, plus ou moins, le fonctionnement de la base de données est important. Car, pour créer un écosystème de sites WordPress basé sur la partage des utilisateurs, ceux-ci doivent partager la même base de données.
wp-config.php : le canal de communication avec la base de données
Une question se pose, maintenant. Comment indiquer à la base de données la façon dont elle doit se comporter ? Sur WordPress, ces canaux de communication peuvent être nombreux. En effet, ceci peut dépendre de l’architecture de votre thème et des extensions installées. Cependant, nous nous attarderons aujourd’hui sur le principal : wp-config.php.
Le fichier wp-config.php est généré automatiquement lors de chaque nouvelle installation de WordPress. Vous le trouverez à la racine de votre site web. Vous le trouverez à la racine de votre site web.
C’est via le wp-config que nous allons “court-circuiter” le fonctionnement normal des tables utilisateurs sur WordPress. D’ailleurs, j’en profite pour faire une précision importante. Pour partager des utilisateurs sur plusieurs sites WordPress, vous devez, bien entendu, être propriétaire de tous les sites web en question. D’une part parce que vous devez avoir les identifiants FTP et de base de données pour réaliser les opérations. D’autre part parce qu’il s’agit de la manipulation de données. Des données dont vous devez être propriétaire avec le consentement des utilisateurs. Si vous n’êtes pas familier avec le concept de consentement, je vous invite à vous référer à la CNIL, autorité compétente en la matière.
functions.php : un bon moyen d’ajouter des fonctionnalités supplémentaires
Il s’agit d’un autre fichier commun à toutes les installations WordPress : le fichier function.php.
Toutefois, il faudra creuser un peu plus pour le trouver. Car celui-ci se trouve dans le répertoire wp-content dans lequel se trouve le sous-répertoire thème sous lequel on trouve l’ensemble des dossiers contenant vos thèmes. Il existe un fichier functions.php dans chacun des thèmes présents sur votre installation WordPress. Bien sûr, seul le thème activé est pris en compte.
D’ailleurs, je vous encourage vivement à ne modifier un fichier functions.php que sur un thème enfant. Histoire de ne pas voir toutes vos modifications disparaître à chaque mise à jour de votre thème. Si vous ne voyez pas de quoi je parle, je vous conseille cet article qui m’a moi-même initié à la création de thèmes enfants.
Pourquoi est-ce que je vous parle de ce fichier ? Pour plusieurs raisons. D’une part, parce qu’il va nous être utile pour fournir de nouvelles indications à la base de données via du code PHP. D’autre part, parce que, à chaque fois que vous trouverez “un bout de code” à insérer sur votre WordPress, ce sera sûrement dans le functions.php qu’il faudra le faire.
Installer un premier site qui hébergera les utilisateurs à partager
Pour mettre en place l’environnement adéquat au partage d’utilisateurs, il faut partir de zéro ! C’est-à-dire, dès la phase d’installation de WordPress. D’ailleurs, sait-on jamais, si vous n’êtes pas très à l’aise avec cette partie, je vous renvoie vers ce très bon article.
Tout d’abord, choisissez une langue. Ensuite, le deuxième écran d’installation de WordPress vous invite à connecter une base de données. Entrez les informations fournies par votre hébergeur à ce sujet. Dans la dernière case, modifiez à votre convenance le préfixe de vos tables. Pour ma part, afin de s’y retrouver, je vais nommer mes tables site1_.
Dans l’écran suivant, entrez l’identifiant, le mot de passe et l’adresse e-mail de votre choix puis validez.
Rendez-vous dans votre base de données via phpmyadmin. Vous pouvez vous rendre compte que les douze tables ont bien été créées avec le préfixe site1_. Parmi elles, on retrouve donc site1_users et site1_usermeta.
C’est maintenant que nous allons nous rendre dans le fichier wp-config.php. Dans ce fichier, nous allons indiquer à quelles tables de base de données notre WordPress doit se référer pour constituer sa liste d’utilisateurs. Descendez jusqu’à la ligne suivante :
/* That's all, stop editing! Happy blogging. */
Juste avant celle-ci, entrez le code suivant :
// tables users et usermeta personnalisées define( 'CUSTOM_USER_TABLE', 'site1_users' ); define( 'CUSTOM_USER_META_TABLE', 'site1_usermeta' );
Je vous le dis tout net. Ces deux lignes ne sont pas indispensables sur la première installation. En effet, la référence à ces tables se fait par défaut pour ce premier WordPress. Néanmoins, il peut être important de les noter par souci de clarté. Il peut être intéressant de savoir à quelles tables se réfère tel ou tel site. Surtout si vous en avez plus de deux connectés aux mêmes tables users et usermeta.
Installer un deuxième WordPress avec lequel partager les utilisateurs
Maintenant, installons un deuxième WordPress sur lequel on retrouvera les utilisateurs de site1_ et vis versa. Comme précédemment, débutez une installation et choisissez la langue. Ensuite, entrez les mêmes informations de base de données que pour votre première installation WordPress. À ceci près qu’il faudra donner un autre préfixe à vos tables. Dans mon cas, ce préfixe sera site2_.
Il est à noter que si vous entrez le même préfixe que pour votre première installation, WordPress considérera qu’il est déjà installé. Cette étape est donc très importante ! Tout comme la prochaine, d’ailleurs !
Car arrêtez tout ! Ne lancez pas l’installation proposée à l’écran suivant tout de suite ! Rendez-vous d’abord dans le wp-config.php. Comme précédemment, descendez jusqu’à la ligne :
/* That's all, stop editing! Happy blogging. */
Puis, juste avant celle-ci, entrez les mêmes lignes que celles entrées dans la première installation WordPress.
// tables users et usermeta personnalisées define( 'CUSTOM_USER_TABLE', 'site1_users' ); define( 'CUSTOM_USER_META_TABLE', 'site1_usermeta' );
Cette fois-ci, cette étape a son importance. En effet, elle indique que les tables à prendre en compte pour constituer la liste des utilisateurs devront être site1_users et site1_usermeta. Ceci alors que, par défaut, ce rôle serait revenu aux tables site2_users et site2_usermeta.
Quand la magie opère
Une fois ceci fait et enregistré, revenez à votre deuxième installation de WordPress et lancez-la. Si vous allez jeter un oeil du côté de la base de données, vous verrez que la manipulation a eu l’effet attendu. Cette fois-ci, seules dix tables ont été installées. Les tables site2_users et site2_usermeta ont été omises car superflues.
Néanmoins, en reprenant l’installation, un petit changement apparaît à l’écran suivant. Effectivement, vous ne pouvez pas entrer d’identifiant ni de mot de passe. Soi-disant, l’utilisateur existe déjà. Pour autant, ne vous laissez pas berner. N’entrez surtout pas la même adresse e-mail que celle utilisée dans la première installation WordPress. Un compte y étant déjà associé, l’inscription ne fonctionnera pas.
En validant votre inscription, un nouvel écran apparaît. Celui-ci vous indique qu’un compte avec l’identifiant admin a été créé. En outre, un mot de passe a été généré. Connectez-vous avec ces identifiants. En allant dans les utilisateurs, vous verrez que le compte créé sur la première installation apparaît.
De même, si vous retournez sur la première installation WordPress, le compte admin de la deuxième apparaît de même.
Cependant, une différence de taille saute aux yeux. En effet, les rôles ne sont pas exportés. Votre premier compte est administrateur sur le premier WordPress mais pas sur le deuxième. Quant au compte admin, il l’est sur le deuxième mais pas sur le premier. Ceci parce que les rôles et permissions ne sont pas exportées d’un site à l’autre.
Comment partager les rôles et permissions des utilisateurs ?
Ainsi, au point où nous en sommes, chaque utilisateur créé sur l’un des deux sites apparaît sur l’autre. Ceci prouve que les indications données via le wp-config.php fonctionnent. Du moins, pour la table site1_users qui partage bien toutes ses données avec tous les sites web.
Cependant, il n’en va pas de même pour la table site1_usermeta. Celle qui contient les métadonnées telles que les rôles utilisateurs ou les permissions données. En effet, son fonctionnement diffère un petit peu. Pour faire simple, là où la table users fonctionne par colonne, usermeta fonctionne par ligne. Ainsi, quand un utilisateur s’inscrit sur l’un des sites, la table va générer des lignes contenant les données entrées. Seulement, celles-ci ne seront associées qu’au site sur lequel elles ont été entrées. Il faudrait que ces lignes soient dupliquées avec une association à l’autre site sur lequel on voudrait transférer ces rôles. Heureusement pour nous, un “bout de code” va régler ce problème.
Dupliquer automatiquement les rôles et permissions des futures inscriptions ?
J’ai dit “bout de code”. Si vous me lisez attentivement, vous savez donc déjà où nous allons nous rendre. Direction la racine de votre première installation WordPress. Ensuite, suivez wp-content→ themes puis le dossier contenant le thème activé. Enfin, cliquez sur functions.php. À la suite du code déjà inscrit, collez ces lignes. Bien sûr, il vous faudra modifier les préfixes en fonction de ceux que vous avez entrés.
function export_usermeta( $user_id, $role ) { // Site expéditeur $prefix_1 = 'site1_'; // Site receveur $prefix_2 = 'site2_'; $caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true ); $level = get_user_meta( $user_id, $prefix_1 . 'user_level', true ); if ( $caps ){ update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps ); } if ( $level ){ update_user_meta( $user_id, $prefix_2 . 'user_level', $level ); } } add_action( 'set_user_role', 'export_usermeta', 10, 2 );
Ce code PHP permet de dupliquer automatiquement les métadonnées entrées lors d’une inscription sur le site web n°1 vers le site web n°2.
Pour effectuer la même opération dans le sens inverse, il faudra vous rendre dans le functions.php du thème de votre deuxième installation. Ensuite, vous devrez juste inverser l’ordre des préfixes entre site expéditeur et site receveur comme suit :
function export_usermeta( $user_id, $role ) { // Site expéditeur $prefix_1 = 'site2_'; // Site receveur $prefix_2 = 'site1_'; $caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true ); $level = get_user_meta( $user_id, $prefix_1 . 'user_level', true ); if ( $caps ){ update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps ); } if ( $level ){ update_user_meta( $user_id, $prefix_2 . 'user_level', $level ); } } add_action( 'set_user_role', 'export_usermeta', 10, 2 );
Voilà, le tour est joué ! Vous avez réussi à créer un écosystème de deux sites WordPress basé sur le partage des utilisateurs. Google n’a qu’à bien se tenir !
Et si j’ai déjà des utilisateurs que je souhaite partager sur mes WordPress ?
Cette création d’écosystème peut se faire dans le cadre d’une refonte d’un site web. Pourquoi pas ? Dans ce cas, vous avez déjà un fichier utilisateurs soit deux tables users et usermeta bien fournies. Eh bien pas de panique, vous n’allez pas perdre ces utilisateurs fidèles âprement convertis.
Avant toute chose, je comprends que l’usage d’une extension puisse rassurer beaucoup d’entre vous. Cependant, je ne vous partagerai pas ce moyen. Ceci parce que j’en connais peu qui proposent l’export ET l’import gratuitement, d’une part. D’autre part, pour celles qui restent, je ne trouve pas qu’elles réalisent cette tâche proprement… Mais peut-être certains d’entre vous voudront bien me contredire en commentaires. Je suis preneur !
Exporter sans risque les tables utilisateurs
En attendant, je vais vous montrer comment exporter/importer ces tables directement dans la base de données. Ne vous inquiétez pas. Pour peu que l’on adopte les bons réflexes, l’opération est très sécurisée ! Et par “bons réflexes”, j’entends : sauvegardez TOUJOURS vos/votre base(s) de données.
Maintenant, rendez-vous dans phpmyadmin et sélectionnez la base de données du site à refondre dans le menu à gauche.
Ensuite, cliquez sur la table users dans la liste. Une fois entré à l’intérieur, cliquez sur exporter dans la barre de menu supérieure. Un nouvel écran apparaît vous proposant quelques options afin de peaufiner l’export de la table sélectionnée. Parmi elles, la plus importante me semble être le format d’export.
Si le préfixe des tables du site à refondre est le même que celui des tables présentes sur le nouveau site, vous pouvez opter pour un format d’export SQL. En revanche, il vous faudra supprimer les tables éponymes dans l’installation finale pour que l’export puisse se faire sans erreur.
Si vos préfixes sont différents, optez plutôt pour un export CSV. Ne vous inquiétez pas. Les jointures entre les tables users et usermeta seront maintenues. Même sous ce format. Toutefois, vérifiez bien que le nombre de colonnes entre la table du site à refondre et celui du nouveau site soit le même. Car certaines extensions de gestion de membres ou d’abonnement en ajoutent. Si ce n’est pas le cas, une erreur empêchera l’import. Il faudra donc, en amont, ajouter manuellement chacune des colonnes dans la table du nouveau site.
Quel que soit le format, reproduisez l’opération à l’identique pour la table usermeta. Deux fichiers au nom des tables correspondantes sont ainsi téléchargés sur votre ordinateur.
Importer proprement les tables utilisateurs
Rendez-vous maintenant dans la base de données du nouveau site via phpmyadmin. Cliquez sur Importer dans la barre de menu supérieure. Un écran apparaît avec toutes les options nécessaires à l’importation.
Pour être complet, dans le cas d’un import CSV, vous devrez d’abord sélectionner la table correspondante avant de cliquer sur Importer. Via le bouton parcourir, vous pouvez importer un fichier à la fois. Si l’opération ne se fait pas automatiquement, vous aurez ensuite à choisir le format d’import (SQL ou CSV).
Voilà, c’est fait ! Tous les utilisateurs de votre ancien site web ont été importés avec succès. À ceci près que leur(s) rôle(s) et leurs permissions n’ont pas été dupliqués. Hélas, il vous faudra réaliser l’opération manuellement sur chaque site de l’écosystème. À ma connaissance, il n’existe pas de requête SQL pour réaliser cette opération en un clic. Mais peut-être suis-je juste ignorant ? Dîtes-le moi en commentaires !
Heureusement, une autre solution existe dans le menu utilisateurs de l’administration WordPress. En effet, un petit menu déroulant permet d’assigner en masse un rôle aux utilisateurs de la liste.
Pourquoi partager ses utilisateurs entre ses sites WordPress ?
Si vous possédez plusieurs sites WordPress permettant l’inscription, le partage des utilisateurs peut être une bonne idée. En effet, pour vous, c’est un moyen d’amener vos utilisateurs fidèles à un site vers d’autres. Vous augmentez ainsi vos trafics.
C’est aussi un atout en terme d’UX (expérience utilisateur). Car, sur internet, plus c’est simple, plus la conversion est rapide. En ce sens, l’inscription sur un site peut en rebuter beaucoup. Surtout s’il faut remplir un formulaire. Quoiqu’il en soit, en centralisant les adhésions, vous simplifiez énormément le fonctionnement de votre site web.
Toutefois, peut-être êtes-vous plutôt adepte de l’environnement multisite ? Ça tombe bien, je compte très prochainement passer en revue les moyens de partager ses utilisateurs WordPress sur du multisite !
Et vous, vous êtes-vous déjà posé sur cette question du partage des utilisateurs sur WordPress ? Si oui, comment avez-vous procédé ? N’hésitez pas à partager vos expériences en commentaires !
Partager la publication « Partager vos utilisateurs sur plusieurs sites WordPress ? C’est possible ! »