Lorsqu'un thème ou une extension utilise des tables personnalisées ou encore des options personnalisées (informations stockées dans la table wp_options), il y a fort à parier qu'une interface de gestion sera nécessaire pour gérer les données de ces tables. Une telle interface fera partie du tableau de bord.
Le code nécessaire sera entré :
▼Publicité Le texte se poursuit plus bas
Le hook admin_menu permet de personnaliser le menu du tableau de bord WordPress. Dans la fonction associée à ce hook, vous pouvez ajouter une option de menu à l'aide des fonctions WordPress suivantes :
Attention : si vous tentez d'appeler ces fonctions en dehors du hook admin_menu, vous obtiendrez un message d'erreur.
Voici un extrait de code qui permet d'ajouter une option de menu principal (le menu « Mon thème » dans l'image présentée).
/**
* Crée la page de gestion du thème dans le tableau de bord.
* @author Christiane Lagacé <christiane.lagace@hotmail.com>
*
* Utilisation : add_menu_page(..., ..., ..., ..., "monprefixe_creer_page_gestion");
*/
function monprefixe_creer_page_gestion() {
global $title; // titre de la page du menu, tel qu'initialisé dans la fonction de rappel de add_menu_page
?>
<div class="wrap">
<h1 class="wp-heading-inline"><?php echo $title; ?></h1>
...
<hr class="wp-header-end">
...
</div>
<?php
}
/**
* Ajoute l'option principale du menu pour gérer le thème dans le tableau de bord.
* @author Christiane Lagacé <christiane.lagace@hotmail.com>
*
* Utilisation : add_action( "admin_menu", "monprefixe_ajouter_menu_tableau_de_bord" );
*/
function monprefixe_ajouter_menu_tableau_de_bord() {
add_menu_page(
__( "Mon thème - Gestion", "mon-domaine-de-localisation" ), // texte de la balise <title>, initialisera $title
__( "Mon thème", "mon-domaine-de-localisation" ), // titre de l'option de menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_gestion", // slug. L'URL de la page sera sous la forme mondomaine.com/wp-admin/admin.php?page=monprefixe_gestion
"monprefixe_creer_page_gestion" // fonction de rappel pour créer la page
);
}
add_action( "admin_menu", "monprefixe_ajouter_menu_tableau_de_bord" );
Dans la page de l'option de menu, notez la présence de la division dont la classe est "wrap". Cette division est utilisée pour formater les autres pages du tableau de bord alors nous l'utiliserons également afin que l'apparence de notre page soit conforme au reste du tableau de bord.
Attention : si vous travaillez dans la classe d'une extension, la fonction de rappel sera en fait un array() puisqu'il s'agit d'une méthode qui sera appliquée à l'objet $this.
class Monprefixe_Mon_Extension {
...
/**
* Constructeur.
*
* @return void
*/
public function __construct() {
...
add_action( 'admin_menu', array( $this, 'ajouter_menu_tableau_de_bord' ) );
}
/**
* Fonction de rappel pour ajouter des options de menu dans le tableau de bord.
*
* @return void
*/
public function ajouter_menu_tableau_de_bord() {
...
add_menu_page(
__( "Mon extension - Gestion", "mon-domaine-de-localisation" ), // texte de la balise <title>, initialisera $title
__( "Mon extension", "mon-domaine-de-localisation" ), // titre de l'option de menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_gestion", // slug
array( $this, "creer_page_gestion" ) // fonction de rappel pour créer la page
);
}
}
Il aurait été possible d'ajouter deux paramètres supplémentaires : l'URL de l'icône devant représenter le menu ainsi que la position du nouveau menu. Si ces paramètres sont omis, le menu utilisera l'icône par défaut et sera placé dans le bas complètement du menu WordPress.
Si vous souhaitez ajouter une option placée sous un menu existant, vous utiliserez add_submenu_page. Les paramètres sont très semblables à ceux de add_menu_page. Cependant, vous devrez ajouter un paramètre au tout début de la liste : le « slug » du menu parent.
add_submenu_page(
"monprefixe_gestion", // slug du menu parent
__( "Mon thème - Ajouter un ...", "mon-domaine-de-localisation" ), // texte de la balise <title>, initialisera $title
__( "Ajouter un ...", "mon-domaine-de-localisation" ), // titre de l'option de sous-menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_ajout", // slug
"monprefixe_creer_page_ajout" // fonction de rappel pour créer la page
);
Attention : si vous désirez ajouter un menu qui contiendra des sous-menu, il est d'usage de faire en sorte que pour le premier sous-menu, la fonction add_submenu_page() utilise le même identifiant (slug) comme premier paramètre (parent_slug) et comme 5e paramètre (menu_slug). Seul le titre de l'option de menu différera afin de ne pas laisser croire qu'il s'agit d'un mauvais fonctionnement.
Autrement dit, le add_menu_page() et le premier add_submenu_page() définieront tous deux la même option de menu. De cette façon, un clic sur l'option du menu principal affichera la même page que lors d'un clic sur le premier sous-menu.
Vous pouvez observer ce comportement dans les options de menu présentes par défaut dans le tableau de bord. Sous l'option de menu Nouvelles, on retrouve le sous-menu « Toutes les nouvelles ». Ces deux options de menu mènent vers la même page.
Voici donc le code permettant d'ajouter les sous-menus Gestion et Ajouter un ... sous l'option de menu Mon thème.
/**
* Ajoute l'option de menu principale et les sous-options pour gérer le thème dans le tableau de bord.
* @author Christiane Lagacé <christiane.lagace@hotmail.com>
*
* Utilisation : add_action( "admin_menu", "monprefixe_ajouter_menu_tableau_de_bord" );
*/
function monprefixe_ajouter_menu_tableau_de_bord() {
add_menu_page(
__( "Mon thème - Gestion", "mon-domaine-de-localisation" ), // texte de la balise <title>, initialisera $title
__( "Mon thème", "mon-domaine-de-localisation" ), // titre de l'option de menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_gestion", // slug
"monprefixe_creer_page_gestion" // fonction de rappel pour créer la page
);
// première option du sous-menu : redéfinit les mêmes critères que le menu
add_submenu_page(
"monprefixe_gestion", // slug du menu parent
__( "Mon thème - Gestion", "mon-domaine-de-localisation" ), // texte de la balise <title> - même que dans add_menu_page()
__( "Gestion", "mon-domaine-de-localisation" ), // titre de l'option de sous-menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_gestion", // réutiliser le slug du menu parent
"monprefixe_creer_page_gestion" // fonction de rappel pour créer la page - même que dans add_menu_page()
);
// seconde option du sous-menu
add_submenu_page(
"monprefixe_gestion", // slug du menu parent
__( "Mon thème - Ajouter un ...", "mon-domaine-de-localisation" ), // texte de la balise <title>, initialisera $title
__( "Ajouter un ...", "mon-domaine-de-localisation" ), // titre de l'option de sous-menu
"manage_options", // droits requis pour voir l'option de menu
"monprefixe_ajout", // slug
"monprefixe_creer_page_ajout" // fonction de rappel pour créer la page
);
}
add_action( "admin_menu", "monprefixe_ajouter_menu_tableau_de_bord" );
Et voici le résultat obtenu par ce code :
« Administration Menus ». Codex WordPress. http://codex.wordpress.org/Administration_Menus
« Create a Simple WordPress Admin Panel – Part ICreate a Simple WordPress Admin Panel – Part I ». Colorlabs. http://colorlabsproject.com/tutorials/create-a-simple-wordpress-admin-panel/
« Plugin API/Action Reference/admin menu ». Codex WordPress. http://codex.wordpress.org/Plugin_API/Action_Reference/admin_menu
« Function Reference/add menu page ». Codex WordPress. http://codex.wordpress.org/Function_Reference/add_menu_page
« Ultimate guide to roles and capabilities ». Solis Lab. http://solislab.com/blog/ultimate-guide-to-roles-and-capabilities/
Site fièrement hébergé chez A2 Hosting.