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?
Vous devez utiliser un hook de mise en file d'attente de script spécifique à une page.
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
.
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 */
}
?>
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;
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