Nadal napotykam ten problem i szukam najlepszego i najprostszego rozwiązania tego problemu.
Przyszedłem wykorzystać niestandardowe typy postów w wielu różnych projektach i rozszerzyłem je o niestandardowe metaboksy, które następnie rozszerzyłem, dodając niestandardowe skrypty, takie jak selektory kalendarzy zdarzeń jQuery ... Wszystko to działa świetnie, z wyjątkiem jednego kluczowego problemu ... Nie chcę, aby te niestandardowe skrypty jQuery ładowały się na każdej stronie administratora.
Zasadniczo szukam sposobu na załadowanie tych niestandardowych pól jquery, gdy jestem na stronie „edytuj post” dla określonego typu postu.
Jakie jest tutaj najlepsze rozwiązanie?
AKTUALIZACJA 1
Przede wszystkim bardzo dziękuję.
Jestem naprawdę zszokowany, że twórcy wtyczek nie dbają o takie rzeczy, ponieważ jak się dowiaduję, jest to jeden z głównych powodów problemów z różnymi wtyczkami.
Mam jednak z tym kilka problemów. Na przykład...
Zmodyfikowałem skrypt, aby wywoływał instrukcję if w następujący sposób:
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events')
Jak widać, staram się tak skonfigurować, aby moje skrypty były wywoływane TYLKO podczas dodawania lub edytowania postu w ramach typu „zdarzeń”.
Nie chcę, aby skrypt ładował się na żadnej innej stronie, a także nie chcę, aby działał na liście stron w ramach typu „zdarzeń” typu post, więc uważam, że instrukcja if jest poprawna.
Problemem jest jednak to, że skrypt ładuje się tylko wtedy, gdy tworzę nowy post w ramach tego typu postów, ale wydaje się, że nie działa, gdy edytuję istniejący post.
Czy mógłbyś to przetestować i może dać mi znać, co robię źle?
Oto dokładny kod, którego używam ... może istnieje lepszy lub prosty sposób na zrobienie tego?
<?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");
}
}
Także ... jeśli chciałbym dodać trzy typy postów i załadować różne skrypty JS dla każdego typu postów, to czy po prostu powielę kod powyżej trzy razy osobno, czy to nie jest dobry sposób na zrobienie tego? Na przykład ... czy lepiej byłoby po prostu wywołać: global $ pagenow, $ typenow; Na górze pliku funkcji czy to ma znaczenie, czy komplikuje rzeczy, gdy duplikuję go więcej niż raz?
Jeśli chodzi o inny problem związany z tym samym ... Używam na przykład wtyczki „gravity form”, ale zauważyłem, że ich skrypty działają na każdej stronie administratora, co powoduje problemy z innymi wtyczkami. Jak mogę zmodyfikować ich skrypt, aby skrypty ładowały się tylko wtedy, gdy ich potrzebuję.
AKTUALIZACJA 2
Zmodyfikowałem mój plik functions.php kodem dostarczonym przez Mike'a (poniżej), jednak wydaje się, że odpowiedni javascript jest nadal dołączany podczas tworzenia NOWEGO posta lub strony. Oznacza to, że gdy próbujesz utworzyć NOWY post lub stronę, tworząc nowy domyślny post / stronę Wordpress lub gdy tworzysz NOWY post / stronę na podstawie jednego z niestandardowych typów postów. Kod zaproponowany przez Mike'a IS działa na wszystkich innych stronach administracyjnych i działa, gdy „EDYTUJ” istniejący post / stronę lub niestandardowy typ posta. Jakieś sugerowane modyfikacje, aby to działało poprawnie?
Oto mój obecny kod:
<?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");
}
}
?>