J'ai deux fonctions simples qui chargent des choses en utilisant wp_enqueue_style()
et wp_enqueue_script()
, quelque chose comme celles-ci:
function admin_custom_css()
{ wp_enqueue_style( 'stylesheet_name', 'stylesheet.css') };
function admin_custom_js
{ wp_enqueue_script( 'javascript_file', 'script.js') };
... et quelques pages d’administration, créées avec add_menu_page()
etadd_submenu_page()
function my_menu() {
add_menu_page('Page 1', 'bar', 'something', 'else', 'foo');
add_submenu_page( 'theme_menu', 'Subpage 1', 'Subpage', 'something', 'else', 'foo');
}
add_action('admin_menu', 'my_menu');
Comment charger mes deux fonctions uniquement sur ces pages?
En ce moment j'utilise:
add_action('admin_init', 'admin_custom_css' );
add_action('admin_init', 'admin_custom_js' );
Mais il charge mes fichiers sur chaque page d'administration, ce qui n'est pas agréable du tout.
Puis-je faire cela via une simple ligne functions.php
ou avoir à les mettre en file d'attente séparément dans mes pages (je préfère fortement la première option, car je devrais éditer beaucoup de fonctions de création de pages d'administrateur).
Merci!
Réponses:
add_menu_page
et lesadd_submenu_page
deux renvoient le "suffixe de hook" de la page, qui peut être utilisé pour identifier la page avec certains hooks. En tant que tel, vous pouvez utiliser ce suffixe en combinaison avec les crochets variablesadmin_print_styles-{$hook_suffix}
etadmin_print_scripts-{$hook_suffix}
cibler spécifiquement ces pages.Je trouve que c'est une méthode propre pour ajouter tout cela parce que tout est géré dans la même fonction. Si vous décidez de supprimer cette fonctionnalité, supprimez simplement l'appel de cette fonction.
la source
admin_print_scripts()
états "admin_print_scripts
ne devrait pas être utilisé pour mettre en file d'attente des styles ou des scripts ". La réponse de @TomAuger est en fait la bonne, bien que non optimale. Il serait avantageux que l'équipe du WP ajoute unadmin_enqueue_scripts-(hookname)
crochet ...Le problème avec @tollmanz est que, puisque vous vous connectez aux crochets -print-styles et -print-scripts, vous devez générer le code HTML pour charger vos scripts manuellement. Ce n'est pas optimal, car vous ne bénéficiez pas de la dépendance et du contrôle de version fournis avec
wp_enqueue_script()
etwp_enqueue_style()
. Cela ne vous permet pas non plus de mettre des choses dans le pied de page si c'est un meilleur endroit pour elles.Revenons donc à la question de l'OP: quel est le meilleur moyen de m'assurer que je puisse mettre en file d'attente JS / CSS sur des pages d'administration spécifiques uniquement?
Décochez l’action "load - {$ my_admin_page}" pour ne faire les choses que lorsque la page d’administration de votre plugin est chargée, puis
Déconnectez l'action "admin_enqueue_scripts" pour ajouter correctement vos
wp_enqueue_script
appels.Cela semble un peu pénible, mais c'est en fait très facile à mettre en œuvre. Du haut:
la source
load-$hook
crochet qui déclenche maoption_page_actions
fonction, auquel je peux ajouter de nombreux autres crochets / filtres, etc. Comme ces actions ne sont appelées que sur la page de choix, les crochets situés au-delà de ce point n'ont pas besoin d'utiliser les crochets namespaced. (comme vous l'avez montré), ce qui est beaucoup plus efficace et intuitif.Si vous utilisez
get_current_screen()
, vous pouvez détecter la page sur laquelle vous vous trouvez. Il y a un exemple dans l'article du codex que j'ai lié qui montre comment utiliserget_current_screen()
avecadd_options_page()
, cette méthode fonctionnera pour n'importe quelle page d'administration.la source
Vous pouvez prendre une réponse et la développer légèrement, en permettant également une utilisation conditionnelle ...
@tollmanz
Exemple:
la source
Comme @ mor7ifer mentionné ci-dessus, vous pouvez utiliser la fonction native WordPress get_current_screen () . Si vous parcourez la sortie de cette fonction, par exemple:
... vous remarquerez une clé appelée base . J'utilise cette méthode pour détecter la page sur laquelle je suis et la mettre en file d'attente. Pour la retirer, procédez comme suit:
la source
Je me demandais la même chose. Il existe une version moderne qui utilise
admin_enqueue_scripts
:la source
De la documentation :
Même avec
admin_print_styles
.la source
la source
Pour le faire, vous devez d'abord trouver le nom de la page d'administration. Ajoutez
admin_enqueue_scripts
avecwp_die($hook)
et allez à votre page de plugin spécifique, vous verrez le nom de la page.Maintenant, copiez le nom de la page et utilisez-le en condition pour charger les scripts sur la page spécifique.
la source