Тож я продовжую стикатися з цим питанням, і я просто шукаю найкраще і найпростіше рішення для вирішення цієї проблеми.
Я почав використовувати власні типи публікацій у багатьох різних проектах і розширив їх спеціальними метабоксами, які потім розширив, додавши спеціальні сценарії, такі як селектори календаря jQuery подій ... Все це чудово працює за винятком однієї ключової проблеми ... Я не хочу, щоб ці спеціальні сценарії jQuery завантажувалися на кожну сторінку адміністратора.
Я по суті просто шукаю спосіб просто завантажити ці власні поля jquery, коли я перебуваю на сторінці "редагувати публікацію" для СПЕЦИФІЧНОГО типу публікації.
Яке найкраще рішення тут?
ОНОВЛЕННЯ 1
Перш за все, дуже дякую.
Я насправді шокований тим, що розробники плагінів не переконуються у подібних випадках, оскільки, як я з’ясував, це одна з ключових причин виникнення проблем з різними плагінами.
У мене є ще деякі проблеми, хоча з цим. Наприклад...
Я змінив сценарій, щоб викликати оператор if таким чином:
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events')
Як ви бачите, я намагаюся налаштувати все так, щоб мої сценарії ЛИШЕ дзвонили, коли я додаю або редагую публікацію в межах публікації типу "події".
Я не хочу, щоб сценарій завантажувався на будь-яку іншу сторінку, а також не хотів, щоб він відображався у списку сторінки в межах публікації типу "події", тому я вважаю, що твердження if правильне.
Однак проблема полягає в тому, що сценарій завантажується лише тоді, коли я створюю нову публікацію в межах цього типу публікації, але вона, здається, не працює, коли я редагую існуючу публікацію.
Чи можете ви перевірити це і, можливо, дайте мені знати, що я можу зробити не так?
Ось точний код, який я використовую ... можливо, є кращий чи простий спосіб зробити це?
<?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");
}
}
Крім того ... якби я хотів додати три типи публікацій і завантажувати різні сценарії JS для кожного типу публікацій, то я б просто дублював код вище трьох окремих разів чи це не гарний спосіб зробити це? Наприклад ... було б краще просто зателефонувати: global $ pagenow, $ typenow; У верхній частині файлу моїх функцій чи це має значення або ускладнює те, коли я копіюю його не один раз?
Щодо іншої проблеми, пов’язаної з тим самим ... Я, наприклад, використовую плагін "форми гравітації", але я помітив, що їхні сценарії працюють на кожній сторінці адміністратора, що викликає проблеми з іншими плагінами. Як би я міг змінити їх сценарій, щоб забезпечити завантаження сценаріїв лише тоді, коли мені вони потрібні.
ОНОВЛЕННЯ 2
Я змінив свій файл function.php з кодом, наданим Майком (нижче), але, здається, застосований JavaScript все ще включається під час створення НОВОЇ дописи чи сторінки. Це означає, що при спробі створити НОВУ публікацію чи сторінку або створити нову публікацію / сторінку WordPress за замовчуванням, або коли ви створили НОВУ публікацію / сторінку, засновану на одному зі своїх спеціальних типів публікацій. Код, запропонований Майком IS, працює на всіх інших сторінках адміністратора, і він працює, коли ви «редагуєте» існуючий пост / сторінку або тип користувальницької пошти. Будь-які запропоновані зміни, щоб зробити цю роботу правильною?
Ось мій поточний код:
<?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");
}
}
?>