web-dev-qa-db-fra.com

Comment charger un plugin js uniquement sur ses pages de paramètres?

J'ai un plugin qui est en conflit avec certaines fonctions wordpress par défaut. Dans le post et les zones de création/édition de page. Je n'ai besoin que de mes fonctions sur mes pages de paramètres. J'ai le chargement du fichier js en admin, pas de problème.

Puis-je dire au script de ne pas charger à moins que je ne voie les pages de paramètres de ma fiche?

2
dcp3450

Vous devez utiliser un hook de mise en file d'attente de script spécifique à une page.

Modifier

La méthode recommandée consiste à utiliser admin_enqueue_scripts-{hook} plutôt que admin_print_scirpts-{hook}. Mais, comme vous ciblez spécifiquement la page d’administration de votre propre plugin, l’un ou l’autre convient parfaitement.

Le raccord à éviter est le "global" admin_print_scripts.

Original

L'appel ressemblerait à ceci:

    /* Using registered $page handle to hook script load */
    add_action('admin_print_scripts-' . $page, 'my_plugin_admin_scripts');

Et vous définissez le hook $page comme suit:

$page = add_submenu_page( $args );

Réponse copiée directement à partir du Codex :

<?php
add_action( 'admin_init', 'my_plugin_admin_init' );
add_action( 'admin_menu', 'my_plugin_admin_menu' );

function my_plugin_admin_init() {
    /* Register our script. */
    wp_register_script( 'my-plugin-script', plugins_url('/script.js', __FILE__) );
}

function my_plugin_admin_menu() {
    /* Register our plugin page */
    $page = add_submenu_page( 'edit.php', // The parent page of this menu
                              __( 'My Plugin', 'myPlugin' ), // The Menu Title
                              __( 'My Plugin', 'myPlugin' ), // The Page title
              'manage_options', // The capability required for access to this item
              'my_plugin-options', // the slug to use for the page in the URL
                              'my_plugin_manage_menu' // The function to call to render the page
                           );

    /* Using registered $page handle to hook script load */
    add_action('admin_print_scripts-' . $page, 'my_plugin_admin_scripts');
}

function my_plugin_admin_scripts() {
    /*
     * It will be called only on your plugin admin page, enqueue our script here
     */
    wp_enqueue_script( 'my-plugin-script' );
}

function my_plugin_manage_menu() {
    /* Output our admin page */
}
?>
4
Chip Bennett

Pour vous rendre la vie plus facile et coder plus rapidement (aucune recherche de fichier de base n'est nécessaire), nous avons écrit le plug-in"Info administrateur actuel".

De cette façon, vous pouvez facilement voir ce que vous obtenez des fonctions globales d'administration ou de la fonction get_current_screen(), auxquelles vous pouvez accéder en utilisant les propriétés que vous voyez dans les onglets supplémentaires de l'aide contextuelle.

// See dump
var_dump( get_current_screen()->property );

# @example
// Get the post type
$post_type = get_current_screen()->post_type;
// Get the current parent_file (main menu entry that meets for every submenu)
$parent = get_current_screen()->parent_file;

enter image description here

enter image description here

2
kaiser

Je ne comprends pas encore pourquoi, mais selon Codex , vous devriez seulement utilisez admin_enqueue_scripts pour mettre en file d'attente les styles/scripts dans l'admin. J'ai une Question ouverte demandant pourquoi, mais je n'ai pas encore reçu de réponse satisfaisante. L'entrée du Codex pourrait faire référence à le post de ce développeur principal .

Voici comment procéder "correctement" (remarque: le hook admin_enqueue_scripts ne doit être appelé qu'à partir d'une autre fonction accrochée, par exemple, comme je l'ai fait dans le deuxième bloc de code avec admin_menu. Si vous essayez d'accrocher trop tôt admin_enqueue_scripts, je vais avoir des erreurs):

add_action('admin_enqueue_scripts', 'YOUR_ENQUEUEING_FUNCTION');
function YOUR_ENQUEUEING_FUNCTION($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = 'my_js';
    wp_register_script($handle, 'http://example.com/path/to/my-javascript.js');
    wp_enqueue_script($handle);
} // function YOUR_ENQUEUEING_FUNCTION

Vous trouverez ci-dessous un plugin entièrement fonctionnel avec lequel jouer. il ne fait rien sauf injecter votre fichier javascript dans la <tête> de seulement votre page d'options -

<?php
// Plugin Name:0-Menu Test
global $my_menu_hook_akt;

add_action('admin_menu', 'create_menu_akt');
function create_menu_akt() {
    global $my_menu_hook_akt;
    $my_menu_hook_akt = add_menu_page(
        'My Cool Plugin\'s Title',
        'My Cool Plugin\'s Name',
        'manage_options',
        'my-cool-plugins-slug',
        'draw_options_page_akt'
    );
    add_action('admin_enqueue_scripts', 'enqueue_only_on_my_page_akt');
} // function create_menu_akt


function enqueue_only_on_my_page_akt($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = 'my_js';
    wp_register_script($handle, 'http://example.com/path/to/my-javascript.js');
    wp_enqueue_script($handle);
} // function enqueue_only_on_my_page_akt


function draw_options_page_akt() {
    // draw your options page
} // function draw_options_page_akt
1
akTed