Formation PUB020 : WordPress, 2023 Ajouter des options de menu dans le tableau de bord WordPress

37.3 Utiliser nos propres styles et scripts dans le tableau de bord


La feuille de style style.css présente dans le dossier du thème n'est pas chargée lorsque le tableau de bord est affiché. Si vous avez besoin de styliser les données affichées dans le tableau de bord, vous devrez utiliser une autre feuille de style.

Il est également possible de charger vos propres fichiers JavaScript pour les pages que vous ajoutez dans le tableau de bord.

Feuilles de style et scripts pour toutes les pages du tableau de bord

Le hook admin_enqueue_scripts permettra de charger correctement les feuilles de style et les scripts pour le tableau de bord.

L'exemple suivant ajoutera un fichier .css et un fichier .js dans le tableau de bord. Ce code sera placé dans le fichier functions.php du thème enfant.

Si ce code faisait partie d'une extension, il serait placé dans la classe de l'extension avec les ajustements requis à add_action().

Nous travaillerons ici avec un thème enfant.

Fichier functions.php

/**
 * Charge des scripts et des feuilles de style dans le tableau de bord.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );
 */
function monprefixe_charger_css_js_admin() {
    // fichiers à charger pour toutes les pages du tableau de bord
    wp_enqueue_style( 'monprefixe-admin', get_stylesheet_directory_uri() . '/css/admin.css' );
    wp_enqueue_script( 'monprefixe-admin', get_stylesheet_directory_uri() . '/js/admin.js' );
}
 
add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );

Attention : par défaut, admin_enqueue_scripts chargera les feuilles de style et les scripts sur toutes les pages du tableau de bord.

Si les styles et scripts ne sont utilisés que pour certaines pages, vous aurez un alourdissement inutile des pages de base du tableau de bord : configurations générales, liste des articles, des pages, des usagers, etc.

Feuille de style pour certaines pages du tableau de bord

Vous avez défini des styles que vous souhaitez utiliser sur certaines pages du tableau de bord? Vous pouvez pour cela utiliser le nom du hook que WordPress a généré pour chacune des pages du tableau de bord.

La fonction de rappel associée à admin_enqueue_scripts recevra ce hook en paramètre.

Retrouver le nom du hook d'une page à l'aide du fichier journal

Le nom de ce hook est généré par WordPress à partir des informations utilisées lors de la génération des options de menu.

La technique la plus facile pour retrouver le nom du hook d'une page du tableau de bord consiste à faire appel àmonprefixe_log_debug().

Il faudra, bien entendu, supprimer cette ligne une fois qu'on aura trouvé l'information recherchée.

PHP

function monprefixe_charger_css_js_admin( $hook ) {
    monprefixe_log_debug( $hook );   // inscrira par exemple toplevel_page_monprefixe_gestion ou mon-theme_page_monprefixe_ajout
    ...
}

Si cette façon de procéder vous convient, vous pouvez passer directement à la prochaine section.

Retrouver le nom du hook à partir du slug

Si vous voulez mieux comprendre comment le nom de ce hook est monté, je vous explique.

Prenons par exemple des options de menu générées comme suit :

Fichier functions.php ou son sous-fichier tableau-de-bord-menus.php

/**
 * 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" );

Le nom du hook sera toujours au format titre-du-menu-parent_page_slug_de_la_page. Il utilise seulement des lettres minuscules non accentuées. Les espaces sont remplacés par des tirets.

Dans les exemples qui suivent, j'ai ajouté de la couleur pour faire le lien entre le texte et le code de génération des options de menu présenté plus haut.

Ainsi, si vous cliquez sur l'option Mon thème, le hook sera toplevel_page_monprefixe_gestion. WordPress utilise toplevel lorsque l'option de menu n'a pas de parent.

Si vous cliquez sur l'option Ajouter un ...,  le hook sera mon-theme_page_monprefixe_ajout.

Une fois que vous savez quel est le nom du hook de vos pages personnelles, il vous est possible de charger des fichiers .css et .js pour une option de menu et ses sous-options.

Vous devrez modifier « mon-theme » par le nom de l'option de menu et ajuster le dernier paramètre de la fonction substr() pour qu'il corresponde au nombre de caractères de ce titre.

Fichier functions.php

/**
 * Charge des scripts et des feuilles de style dans le tableau de bord.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );
 */
function monprefixe_charger_css_js_admin( $hook ) {
    // fichiers à charger pour mon option de menu perso et ses sous-options dans le tableau de bord
    if ( 'toplevel_page_monprefixe_gestion' == $hook || 'mon-theme' == substr( $hook, 0, 9 ) ) {
        wp_enqueue_style( 'monprefixe-admin', get_stylesheet_directory_uri() . '/css/admin.css' );
        wp_enqueue_script( 'monprefixe-admin', get_stylesheet_directory_uri() . '/js/admin.js' );
    }
}
 
add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );

Retrouver le nom du hook dans une variable globale

Voici une autre technique pour retrouver le nom du hook d'une page du tableau de bord. Il s'agit de le retenir dans une variable qui aura été générée lors de la création de l'option de menu.

La démonstration est ici faite avec add_options_page() mais sachez que le principe est le même avec les autres fonctions, par exemple add_menu_page(), add_submenu_page() et add_management_page().

Fichier functions.php ou son sous-fichier tableau-de-bord-menus.php

/**
 * Ajoute une option de menu sous Réglages pour gérer les options du 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' );
 */
public function monprefixe_ajouter_menu_tableau_de_bord() {
    global $monprefixe_hook_options;
 
    // ajout d'une option de menu sous le menu Réglages
    $monprefixe_hook_options = add_options_page(
        __( "Mon thème - Options", "mon-domaine-de-localisation" ),   // texte de la balise <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_options",   // slug
        "monprefixe_creer_page_options"    // fonction de rappel pour créer la page
    );
}
 
add_action( 'admin_menu', 'monprefixe_ajouter_menu_tableau_de_bord' );

Fichier functions.php

/**
 * Charge des scripts et des feuilles de style dans le tableau de bord.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );
 */
function monprefixe_charger_css_js_admin( $hook ) {
    global $monprefixe_hook_options;    // variable initialisée lors de l'ajout de l'option de menu

    // fichiers à charger seulement pour la page d'options de mon thème 
    if ( $hook == $monprefixe_hook_options ) {
        wp_enqueue_style( 'monprefixe-admin',get_stylesheet_directory_uri() . '/css/admin.css' );
        wp_enqueue_script( 'monprefixe-admin',get_stylesheet_directory_uri() . '/js/admin.js' );
    }
}
 
add_action( 'admin_enqueue_scripts', 'monprefixe_charger_css_js_admin' );

Pour plus d'information

« Loading Scripts Correctly in the WordPress Admin ». Pippins Plugins. https://pippinsplugins.com/loading-scripts-correctly-in-the-wordpress-admin/

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre