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");
}
}
?>