Je continue donc à rencontrer ce problème et je cherche simplement la solution la meilleure et la plus simple pour résoudre ce problème.
J'en suis venu à utiliser des types de messages personnalisés dans de nombreux projets différents et je les ai étendus avec des métaboxes personnalisés que j'ai ensuite étendus en ajoutant des scripts personnalisés tels que des sélecteurs de calendrier d'événements jQuery ... Tout cela fonctionne très bien, sauf pour un problème clé ... Je ne veux pas que ces scripts jQuery personnalisés se chargent sur chaque page de l'administrateur.
Je cherche essentiellement un moyen de simplement charger ces champs jquery personnalisés lorsque je suis sur la page "modifier le message" pour un type de message SPÉCIFIQUE.
Quelle est la meilleure solution ici?
MISE À JOUR 1
Tout d'abord, merci beaucoup.
Je suis en fait choqué que les développeurs de plugins ne s'assurent pas de choses comme ça, car comme je le découvre, c'est l'une des principales raisons pour lesquelles des problèmes existent avec différents plugins.
J'ai cependant d'autres problèmes avec cela. Par exemple...
J'ai modifié le script pour appeler l'instruction if comme ceci:
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events')
Comme vous pouvez le voir, j'essaie de configurer les choses de manière à ce que mes scripts soient appelés UNIQUEMENT lorsque j'ajoute ou modifie une publication dans le type de publication "événements".
Je ne veux pas que le script se charge sur une autre page et je ne veux pas non plus qu'il s'exécute sur la liste des pages dans le type de message "événements", donc je pense que l'instruction if est correcte.
Le problème semble cependant être que le script ne se charge que lorsque je crée un nouveau message dans ce type de message, mais il ne semble pas fonctionner lorsque je modifie un message existant.
Pourriez-vous tester cela et peut-être me faire savoir ce que je pourrais faire de mal?
Voici le code exact que j'utilise ... peut-être y a-t-il un moyen meilleur ou simple de le faire?
<?php
// INCLUDE METABOX CUSTOM JQUERY DATEPICKER 2
add_action('admin_init','load_admin_datapicker_script');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events') {
$ss_url = get_bloginfo('stylesheet_directory');
wp_enqueue_script('jquery');
wp_enqueue_script('custom_js_jquery_ui',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array('jquery'));
wp_enqueue_script('custom_js_daterangepicker',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array('jquery'));
wp_enqueue_script('custom_js_custom',"{$ss_url}/admin-metabox/js/custom.js",array('jquery'),NULL,TRUE);
wp_enqueue_style('custom_css_daterangepicker',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style('custom_css_jquery_ui',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
Aussi ... si je voulais ajouter trois types de publication et charger différents scripts JS pour chaque type de publication, puis-je simplement dupliquer le code ci-dessus trois fois ou n'est-ce pas une bonne façon de procéder? Par exemple ... serait-il préférable d'appeler simplement: global $ pagenow, $ typenow; En haut de mon fichier de fonctions ou est-ce important ou compliqué lorsque je le copie plusieurs fois?
Sur un problème différent lié au même ... J'utilise par exemple le plugin "gravity forms" mais j'ai remarqué que leurs scripts s'exécutent sur chaque page de l'administrateur, ce qui cause des problèmes avec d'autres plugins. Comment pourrais-je modifier leur script pour m'assurer que les scripts ne sont chargés que lorsque j'en ai besoin.
MISE À JOUR 2
J'ai modifié mon fichier functions.php avec le code fourni par Mike (ci-dessous) mais il semble que le javascript applicable soit toujours inclus lorsque vous créez un NOUVEAU message ou une nouvelle page. Cela signifie que lorsque vous essayez de créer une NOUVELLE publication ou page soit en créant une nouvelle publication / page wordpress par défaut, soit lorsque vous créez une NOUVELLE publication / page basée sur l'un de vos types de publication personnalisés. Le code proposé par Mike fonctionne sur toutes les autres pages d'administration et il FONCTIONNE lorsque vous "MODIFIEZ" une publication / page existante ou un type de publication personnalisé. Des modifications suggérées pour rendre ce travail correct?
Voici mon code actuel:
<?php
add_action('admin_init','load_admin_datapicker_script');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (empty($typenow) && !empty($_GET['post'])) {
$post = get_post($_GET['post']);
$typenow = $post->post_type;
}
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events') {
$ss_url = get_bloginfo('stylesheet_directory');
wp_enqueue_script('jquery');
wp_enqueue_script('custom_js_jquery_ui',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array('jquery'));
wp_enqueue_script('custom_js_daterangepicker',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array('jquery'));
wp_enqueue_script('custom_js_custom',"{$ss_url}/admin-metabox/js/custom.js",array('jquery'),NULL,TRUE);
wp_enqueue_style('custom_css_daterangepicker',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style('custom_css_jquery_ui',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
?>
la source
Réponses:
Tout d'abord, je suppose que vous utilisez
wp_enqueue_script()
pour charger vos scripts , non?Cela dit, si je comprends votre question, ce dont vous avez besoin est quelque chose comme ce qui suit . Vous devrez le modifier pour vos détails, bien sûr, mais cela vous donne le cadre général.
Nous accrochons
admin_init
avec la fonctionload_my_script()
pour tester le global$pagenow
pour une correspondance avec la page d'administrationedit.php
, et le global$typenow
pour voir si le type de publication est celui que vous voulez.Le reste n'est que des détails que vous pouvez lire ici si vous avez besoin d'en savoir plus:
MISE À JOUR
Je réponds à votre mise à jour. Malheureusement ( pour une raison quelconque )
$typenow
n'a pas de valeur pendantadmin_init
, vous devrez donc l'obtenirpost_type
en chargeant la publication en fonction du paramètre URL'post'
comme vous le voyez dans l'exemple suivant (j'ai copié la ligne ci-dessus et la ligne ci-dessous de votre exemple afin que vous puissiez voir où le placer):PS Quant à vos autres questions, merci de les poster comme nouvelle question sur le site pour que moi ou d'autres y répondent. Étant donné que nous travaillons si dur pour vous aider, veuillez prendre grand soin de donner à votre titre le meilleur titre possible et veuillez également écrire vos questions aussi clairement et succinctement que possible avec un bon formatage et un anglais correct. Si vous le faites, cela aidera les mêmes problèmes à reconnaître que votre question est similaire à ce dont ils ont besoin et cela facilitera la tâche de nous qui répondons à vos questions.
Je vous le demande ( et à tous ceux qui posent des questions sur WordPress Answers ) en guise de faveur en échange de prendre le temps de répondre à vos questions parce que moi et les autres modérateurs voulons faire de WordPress Answers une ressource formidable pour la communauté au lieu de encore un autre forum bâclé qui est difficile à lire et difficile à trouver des réponses comme tant d'autres sites sur le web.
MISE À JOUR # 2
Je pensais que vous aviez peut-être eu un problème de priorité d'opérateur dans votre instruction if, mais lorsque j'ai testé avant, je ne l'ai pas rencontré. Si cela se comporte comme vous le dites, alors vous le faites presque certainement, essayez-le à la place (désolé, je n'ai pas le temps de le tester pour vous assurer que cela fonctionne):
la source
Je pensais que j'ajouterais ici du code qui a résolu un problème connexe. Dans mon cas, j'essaie d'obtenir JavaScript et CSS à charger uniquement sur les pages et les messages et (modifier et créer) et nulle part ailleurs.
J'avais trouvé une solution viable
basename( $_SERVER[ 'SCRIPT_FILENAME' ] )
pour déterminer où j'étais sur le backend. J'étais cependant inquiet car la disponibilité de$_SERVER[ 'SCRIPT_FILENAME' ]
pourrait varier d'un serveur à l'autre (quelqu'un sait-il à quel point il est probable qu'il$_SERVER[ 'SCRIPT_FILENAME' ]
ne soit pas disponible sur un serveur?)Puis je suis tombé sur cette question et la réponse de MikeSchinkel. Avec une petite modification, je l'ai fait fonctionner pour moi, sauf pour une chose. Il semble que pour une raison quelconque, lorsqu'un nouveau message est créé via "Ajouter un nouveau", cela ne fonctionne pas.
Avec les ajustements suivants, je l'ai fait fonctionner et je le partage ici dans l'espoir d'aider les autres et de l'améliorer.
Ensuite, j'essaie de limiter certains scripts à ma page d'options de thème, ce qui ne peut pas être fait sur la base de $ pagenow car l'URL qui apparaît est admin.php? Page = themeoptions et je ne veux pas les scripts sur chaque administrateur Page .php, uniquement sur cette page spécifique (ma page d'options de thème)
Quelqu'un sait comment cela pourrait être mieux fait?
Et pour répondre à ma propre question:
la source
Par Justin Tadlock, vous devez vous connecter à admin_enqueue_scripts par opposition à wp_enqueue_scripts pour les plugins ou les scripts admin uniquement:
http://justintadlock.com/archives/2011/07/12/how-to-load-javascript-in-the-wordpress-admin
la source
Je sais que la question a été répondue. Je pense que c'est une solution plus simple.
la source
J'ai créé une version qui n'utilise pas la variable $ typenow:
la source
$_GET
uniquement sur peut échouer. Quoi qu'il en soit: Bienvenue sur WPSE.Qu'en est-il de:
la source
Cette
n'est pas tout à fait correct. Il a une valeur définie sur admin_init dans la plupart des écrans de type de message comme Ajouter un nouveau, liste de taxonomie, liste de modification et d'entrée de taxonomie, mais il n'en a pas dans l'écran "Modifier votre type de post".
En outre, comme d'autres l'ont souligné, le crochet correct à utiliser pour ajouter des feuilles de style et des scripts à WP Admin est
admin_enqueue_scripts
. Si vous utilisez ce crochet, vous n'avez pas besoin de le vérifieris_admin()
car il est uniquement déclenché dans WP Admin et vous obtenez comme paramètre l'écran actuel. http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scriptsla source