Intereting Posts
Будет ли кэширование WordPress влиять на переменные сеанса, настраиваемые обновления и отображение изображений из таблицы без WordPress? Дополнительная заметка на первой странице Должен ли я использовать стандартную функцию wp_mail () для темы премиум-класса? jQuery формы и обновления информации Поиск глобальных переменных На моей странице индекса блога отображается последнее сообщение в заголовке? Можно ли изменить шаблон списка избранных плагинов Elated таким образом, чтобы он не противоречил будущим обновлениям плагина? Изображения не отображаются Используя multisite, как я могу получить два разных сайта в сети, чтобы иметь разные активные темы? Отображение субдомена WordPress / «архивирование» Как вы используете CPT в качестве домашней страницы по умолчанию? Как я могу ограничить доступ к пользовательской роли WordPress только для определенного плагина? Содержимое виджета Предельные попытки входа в систему перед запуском PHP? Несколько комментариев в одной странице

Загрузка / выгрузка сценария WordPress – wp_deregister_script ('jquery')

У меня есть несколько вопросов, связанных с загрузкой / выгрузкой WordPress инструментов javascript. После прочтения хорошо написанного ответа на вопрос Питера Гузена, это заставило меня немного поучиться и очистить код, который я использую, чтобы загрузить мои библиотеки. Этот код из файла function.php моей дочерней темы. У меня есть несколько функций на моем сайте, которые используют инструменты календаря datepicker. Кроме того, есть несколько плагинов, которые, я уверен, используют jQuery.

function jquery_loadup() { //wp_deregister_script('jquery'); <--- ?H wp_enqueue_script('jquery'); //wp_enqueue_script('jquery-migrate'); wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css'); } add_action('wp_enqueue_scripts','jquery_loadup'); 

У меня создалось впечатление, что строка wp_deregister_script('jquery') существенно сбрасывает / очищает все предыдущие «запросы» для сценариев jquery, поэтому они не мешают друг другу. В этой строке следует wp_enqueue_script('jquery'); должно приводить к минимальной чистой загрузке jQuery через обычно используемые сценарии WordPress, зарегистрированные в скриптах или скриптах, нет? Я бы подумал, что тесты на регистрацию для регистрации на наличие предыдущей «установки» для jquery и если он находит один или несколько, останавливает их загрузку, если они не зарегистрированы, ничего не делать.

Я вижу, что когда я использую wp_deregister_script('jquery') я получаю сообщение об ошибке в веб-сайте "ReferenceError: jQuery is not defined" . Когда это произойдет, все мои функции JavaScript выходят из строя. Какого черта? Когда вы заметили, сайт работает нормально.

Вопросы: Я что-то упустил? Что я не понимаю о звоннице? Почему я должен получать сообщение об ошибке?

Обратите внимание, что строка для jquery-migrate предназначена для программного обеспечения, использующего более старые версии jQuery. Я тестировал его, но я не вижу, что он что-то делает на моем сайте, поэтому я использовал его для улучшения времени загрузки и ответа. Вопрос: Это плохая идея?

Рекомендации:

  • Отличный ответ на сценарий Загрузка by Pieter Goosen

  • WordPress Codex на скрипте Enqueue

Solutions Collecting From Web of "Загрузка / выгрузка сценария WordPress – wp_deregister_script ('jquery')"

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

  • wp_register_script Регистрирует скрипт в WordPress. Он не называется вызываемым, он просто доступен для WordPress, если он необходим.
  • wp_deregister_script – это полная противоположность. Он удаляет определения, сделанные в wp_register_script, сценарий больше не доступен в качестве зависимости или для очереди.

Зарегистрированные скрипты не выводят ничего в код. Они просто определяют сценарий программным образом, поэтому WP может реагировать на зависимости и очереди.

  • wp_enqueue_script фактически определяет и wp_enqueue_script очередь скрипт для вывода в wp_enqueue_script / нижнем колонтитуле HTML-страницы.
  • wp_dequeue_script делает полную противоположность и выводит сценарий для вывода.

Фактическая печать происходит в действии «wp_head» или «wp_footer», в зависимости от данных регистра.

Пример:

 wp_deregister_script('jquery'); wp_register_script('jquery', ("https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"), false, '1.9.1', true); wp_enqueue_script( 'script-1', get_template_directory_uri() . '/js/example1.js', array('jquery'), '1.0.0', false ); wp_enqueue_script( 'script-2', get_template_directory_uri() . '/js/example2.js', array('jquery'), '1.0.0', true ); wp_enqueue_script( 'script-3', get_template_directory_uri() . '/js/example3.js', array('jquery'), '1.0.0', true ); wp_enqueue_script( 'script-4', get_template_directory_uri() . '/js/example4.js', array('jquery'), '1.0.0', true ); wp_enqueue_script( 'script-5', get_template_directory_uri() . '/js/example5.js', array('jquery'), '1.0.0', true ); 

В этом примере я отменю регистрацию jQuery. Он больше не доступен, и я получаю ту же ошибку, что и вы, если я не зарегистрирую ее снова. (На этот раз из Google CDN в надежде, что это ускорит мою страницу.)

Но после третьей строки jQuery не будет напечатана. Он нигде не появится. Но из четвертой строки я называю кучу скриптов, все из которых имеют jquery как зависимость. Первый находится в заголовке, остальные – в нижнем колонтитуле. Из-за зависимостей, jQuery автоматически попадает в очередь в заголовке, потому что в первую очередь там нужен.

Таким образом, с системой скриптов WordPress, которая достаточно прочная, нет необходимости обрабатывать помехи или предыдущие запросы. Зарегистрированные скрипты вызываются при необходимости один раз и только при необходимости.

В вашем примере вы отмените сценарий в строке 1 функции и снова вызовите его в строке 2. Но из-за отмены регистрации WordPress забыл все детали как URL, версию, зависимости и т. Д. Правильной функцией в вашей логике было бы wp_dequeue_script , но даже это не нужно. WordPress оценивает необходимость, глядя на скрипты, установленные в очереди, или зависимости.

Редактировать:

как WordPress знает, как остановить беспорядок, оставленный 8 различными плагинами, все пытаются добавить разные версии jquery?

Последний экземпляр регистрации jquery перед действием wp_print_scripts – это тот, который печатается. Это, по сути, то, для чего предназначена приоритетная система действий / фильтров.

Просто чип, в первую очередь, спасибо за дополнение, оценили.

Вы используете дочернюю тему, родительская тема которой должна быть помещена в библиотеку jquery, встроенную в wordpress. Как я уже сказал в сообщении, на которое вы ссылаетесь, это плохая практика, мой акцент, для любой родительской темы по умолчанию не помещать jquery.

У вас есть пара проблем с кодом. Прежде всего, никогда не отменяйте регистрационную библиотеку jQuery по умолчанию, позже вы будете ломать что-то. Правильный способ – удалить сценарий с помощью wp_dequeue_scripts .

Только один вопрос, хотя здесь, зачем вам нужно деактивировать jquery и запросить его. Это обычно используется авторами плагинов, чтобы убедиться, что jquery не загружается дважды, причина здесь, плагины работают со всеми темами, поэтому невозможно узнать, загружена ли тема, которую пользователь использует с плагином, загружена jquery. У вас запущена дочерняя тема, которая будет работать только над этой конкретной родительской темой, поэтому вы узнаете, загружена ли родительская тема jquery. Таким образом, нет необходимости перечеркивать и требовать.

Во-вторых, вам придется искать приоритет. add_action имеет 4 параметра, третий – приоритет ( $priority ). Обычно плагины и дочерние темы загружают свои скрипты после родительской темы, чтобы гарантировать, что она не будет переполнена позже. Поэтому разумно и полезно практиковать последнее действие. Для этого вам понадобится очень низкий приоритет, то есть очень большое число.

  add_action( 'wp_enqueue_scripts', 'jquery_loadup', 999 );