La page d’administration du profil utilisateur
Cette page est accessible depuis le menu Comptes
du tableau bord WordPress. De base, elle est déjà pas mal chargée par WordPress. Le thème et toutes les extensions qui gèrent des aspects du profil utilisateur peuvent encore l’enrichir. Elle peut donc devenir très fournie voire fouillie au point d’en devenir inexploitable. C’est le cas notamment si on combine plusieurs extensions qui manipulent des données utilisateurs, comme MemberPress, WooCommerce, BuddyPress…
Pour cet article, j’ai installé uniquement le thème Avada et l’extension Yoast SEO, et voilà déjà ce que ça donne :
Cette page est construite au coeur de WordPress dans le fichier wp-admin/user-edit.php
. Il n’est pas possible de la surcharger. Par contre, en parcourant le code de cette page, il apparaît plusieurs astuces combinées qui permettent de la simplifier :
- L’utilisation de filtres
- La suppression d’actions
- Des ajustements avec jQuery
L’utilisation de filtres
Peu de filtres peuvent être utilisés pour personnaliser cette page. Dans cet exemple, un des rares que j’ai trouvé permet de filtrer la liste des champs de contacts :
Le filtre en question : apply_filters( 'user_contactmethods', string[] $methods, WP_User|null $user )
.
Appliqué sur cette page, voilà ce que contient la variable $methods
:
J’ai utilisé ce filtre pour vider l’ensemble des champs de contact, comme suit :
Je ne m’encombre pas à filtrer les éléments du tableau, et retourne tout simplement un tableau vide.
La suppression d’actions
Ajout des champs utilisateurs
Deux actions sont traditionnellement utilisées afin d’enrichir la page d’administration d’un profil utilisateur WordPress :
do_action( 'show_user_profile', WP_User $profile_user )
do_action( 'edit_user_profile', WP_User $profile_user )
show_user_profile
est appelée lorsque l’utilisateur modifie son propre profil.
edit_user_profile
est appélée lorsque l’utilisateur modifie un autre profil que le sien.
Dans la documentation WordPress, il est stipulé que les informations sont ajoutées après le paragraphe À propos de vous
. En réalité, elles sont ajoutées précisément après le paragraphe Mots de passe d’application
.
Dans cet exemple je souhaite supprimer la section ajoutée par Yoast SEO :
Une recherche dans le code de l’extension Yoast SEO montre que ces deux actions sont utilisées dans la classe WPSEO_Admin_User_Profile
. Précisément, elles sont appelées en passant une référence à l’instance de cette classe et à la méthode user_profile
de la manière suivante :
add_action( 'show_user_profile', [ $this, 'user_profile' ] );
En théorie, il suffirait donc de supprimer ce hook en utilisant la fonction remove_action
fournie par WordPress. Mais, en pratique, cela ne fonctionne pas. En effet, la référence $this
ne peut pas être retrouvée simplement. J’ai déjà traité ce sujet en particulier dans un précédent article : Bien utiliser les hooks WordPress.
Je vais donc réutiliser la fonction offerte à la fin de cet article :
remove_filters_with_method_name( $hook_name = '', $method_name = '', $priority = 0 )
J’utilise le hook personal_options
pour supprimer l’inscription de show_user_profile
et de edit_user_profile
parce qu’il est appelé lors de la construction de cette page, donc peu avant ces deux dernières.
D’ailleurs, voici une référence très intéressante, voire incontournable, à propos de l’ordre d’exécution des hooks dans WordPress : hookorder.com.
Traitement des champs utilisateurs
Les deux hooks précédents vont de pair avec les actions suivantes :
do_action( 'personal_options_update', int $user_id )
do_action( 'edit_user_profile_update', int $user_id )
personal_options_update
est appelée lorsque l’utilisateur valide la modification son propre profil.
edit_user_profile
est appelée lorsque l’utilisateur valide la modification d’un autre profil que le sien.
Ces deux actions permettent de traiter les valeurs des champs soumis par le formulaire de modification de profil.
Un oubli n’est pas forcément grave, mais parfois cela peut provoquer une erreur, comme c’est le cas justement pour Yoast SEO qui vérifie le Nonce lors de l’appel de process_user_option_update
.
Les supprimer est donc également important, par exemple en appelant la même action avec une priorité plus basse afin qu’elle soit exécutée avant :
Choix des palettes de couleurs
Il existe une autre action appelée dans la page et qui peut être supprimée : celle qui génère le choix des couleurs.
Cette action est admin_color_scheme_picker
. Afin d’être bien certain de supprimer son exécution, je place le code dans l’appel du hook user_edit_form_tag
.
Ajustements avec jQuery
Certaines informations ne peuvent pas être supprimées grâce aux deux méthodes précédentes. Dans cet exemple, je supprime les paragraphes Options personnelles
, au début, et Mots de passe d’application
, à la fin, grâce la méthode remove()
de jQuery.
Pour ce faire, j’utilise à nouveau le hook personal_options
puisqu’il est appelé lors de l’exécution de la page d’administration du profil utilisateur.
Le code jQuery est ainsi ajouté à la page :
Le code intégral
Le code complet de l’exemple précédent qui regroupe toutes les approches :
Il est bien évident que la suppression du choix des couleurs n’a plus guère de sens si le paragraphe complet est supprimé à l’aide de jQuery. Je l’ai cependant laissé pour mémoire.
Le résultat en image :