Intereting Posts
Экспорт портфеля с картинками Применить пользовательский css для роли пользователя Как не отображать экземпляр виджета динамически? Как я могу разделить несколько баз данных сайтов WordPress с одним сайтом? Требуется модификация Search.php rewrite_rule () не сохраняет строку запроса Медленно получать сообщения из категории Как скрыть меню в администраторе WordPress Лучший способ определить базу данных с кодами продуктов и внутренней поддержкой? Каков наилучший способ опубликовать каждую фотографию, загруженную отдельно и автоматически? Разрешить переменное количество комментариев перед разбиением на страницы Вставить и количество слов не работает для экземпляра wp_editor WP_Query о meta_key и его значении массива WordPress работает SQL-запрос для обновления базы данных из формы Как написать этот оператор SQL для сообщений, написанных за последние 24 часа?

Неожиданный порядок загрузки скриптов

Я пытаюсь загрузить скрипты в определенном порядке и получаю неожиданные результаты. Я использую этот скрипт:

function tallulah_scripts() { wp_enqueue_script( 'header-js', get_template_directory_uri() . '/js/header.min.js', null, '1.0', false ); wp_deregister_script('jquery'); wp_enqueue_script( 'footer-js', get_template_directory_uri() . '/js/footer.min.js', null, '1.0', true ); wp_enqueue_script( 'jquery', get_template_directory_uri() . '/js/jquery.min.js', null, '2.1.0', true ); } add_action( 'wp_enqueue_scripts', 'tallulah_scripts'); 

… и когда я загружаю страницу, сценарии выглядят следующим образом:

  <script type='text/javascript' src='http://tallulah/wp-content/themes/tallulah/js/jquery.min.js?ver=2.1.0'></script> <script type='text/javascript' src='http://tallulah/wp-content/themes/tallulah/js/footer.min.js?ver=1.0'></script> </body> </html> 

странно? Как я должен сначала загружать footer.min.js для загрузки? Я попытался установить зависимость так:

 wp_enqueue_script( 'jquery', get_template_directory_uri() . '/js/jquery.min.js', 'footer-js', '2.1.0', true ); 

.. но это, кажется, не имеет никакого эффекта. Любые указатели, пожалуйста?

Простое исправление

Причина, по которой ваш код не работает, заключается в том, что третий параметр функции wp_enqueue_script() ожидает массив , а не строку.

Просто замените 'footer-js' на array('footer-js') и он будет работать:

 function tallulah_scripts() { wp_enqueue_script( 'header-js', get_template_directory_uri() . '/js/header.min.js', null, '1.0', false ); wp_deregister_script('jquery'); wp_enqueue_script( 'footer-js', get_template_directory_uri() . '/js/footer.min.js', null, '1.0', true ); wp_enqueue_script( 'jquery', get_template_directory_uri() . '/js/jquery.min.js', array('footer-js'), '2.1.0', true ); // Note the footer-js dependency } add_action( 'wp_enqueue_scripts', 'tallulah_scripts'); 

Альтернативное решение

Менее распространенный (и не рекомендуется) способ справиться с этим – вывести свой собственный тег, чтобы включить jQuery в любом месте, в буквальном смысле.

Первым шагом является удаление jQuery из массива глобальных скриптов непосредственно перед тем, как WordPress собирается обработать его, мы делаем это с print_scripts_array фильтра фильтра print_scripts_array и удаления записи jQuery из массива.

Второй шаг состоит в том, чтобы просто откликнуть пользовательский <script> указывающий на скрипт jQuery, его можно было бы отследить с помощью любого крючка действия или даже вручную помещать в файл шаблона (не рекомендуется), в этом примере я использую wp_footer крючок с низким приоритетом, поэтому скрипт вставляется после любых других элементов, связанных с wp_footer (в основном в самом конце страницы).

 // Force remove default jQuery add_filter('print_scripts_array', 'remove_jquery'); function remove_jquery($scripts) { $key = array_search('jquery', $scripts); if ($key !== false) { unset($scripts[$key]); } return $scripts; } // Print custom jQuery wherever you want add_action('wp_footer', 'print_custom_jquery', 200); function print_custom_jquery() { echo '<script src="'.get_template_directory_uri().'/js/jquery.min.js"></script>'; } эта // Force remove default jQuery add_filter('print_scripts_array', 'remove_jquery'); function remove_jquery($scripts) { $key = array_search('jquery', $scripts); if ($key !== false) { unset($scripts[$key]); } return $scripts; } // Print custom jQuery wherever you want add_action('wp_footer', 'print_custom_jquery', 200); function print_custom_jquery() { echo '<script src="'.get_template_directory_uri().'/js/jquery.min.js"></script>'; } не // Force remove default jQuery add_filter('print_scripts_array', 'remove_jquery'); function remove_jquery($scripts) { $key = array_search('jquery', $scripts); if ($key !== false) { unset($scripts[$key]); } return $scripts; } // Print custom jQuery wherever you want add_action('wp_footer', 'print_custom_jquery', 200); function print_custom_jquery() { echo '<script src="'.get_template_directory_uri().'/js/jquery.min.js"></script>'; } 

Проверьте следующий URL: http://www.trembl.org/codec/832/

В нем говорится, что действие wp_enqueue_scripts имеет третий параметр (приоритет)

— РЕДАКТИРОВАТЬ —

Если вам нужно загрузить скрипт после других, я думаю, вы это делаете:

 function load_latests_scripts() { wp_enqueue_script( 'footer-js', get_template_directory_uri() . '/js/footer.min.js', null, '1.0', true ); // ... other scripts } add_action('wp_enqueue_scripts', 'load_latests_scripts', 1); // 1 is smaller than the default 10. 

Если вам нужно загрузить скрипт перед другими, я думаю, вы это делаете:

 function load_first_scripts() { wp_enqueue_script( 'header-js', get_template_directory_uri() . '/js/header.min.js', null, '1.0', false ); // ... other scripts } add_action('wp_enqueue_scripts', 'load_first_scripts', 20); // 20 is bigger than the default 10.