Я уже добавил свои сценарии, но я хотел знать предпочтительный способ.
Я просто поместил <script>
тег прямо в header.php
мой шаблон.
Есть ли предпочтительный способ вставки внешних или пользовательских файлов js?
Как бы я связал файл JS на одной странице? (Я имею в виду домашнюю страницу)
theme-development
javascript
naugtur
источник
источник
Ответы:
Используйте
wp_enqueue_script()
в своей темеОсновной ответ заключается в том, чтобы использовать
wp_enqueue_script()
в качествеwp_enqueue_scripts
переднего концаadmin_enqueue_scripts
для администратора. Это может выглядеть примерно так (предполагается, что вы звоните изfunctions.php
файла своей темы ; обратите внимание, как я ссылаюсь на каталог таблиц стилей):Это основы.
Предопределенные и несколько зависимых скриптов
Но допустим, вы хотите включить jQuery и jQuery UI Sortable из списка скриптов по умолчанию, включенных в WordPress, и хотите, чтобы ваш скрипт зависел от них? Легко, просто включите первые два скрипта, используя предопределенные дескрипторы, определенные в WordPress, и для вашего скрипта предоставьте 3-й параметр,
wp_enqueue_script()
который представляет собой массив дескрипторов скриптов, используемых каждым скриптом, например:Скрипты в плагине
Что если вы хотите сделать это в плагине? Используйте
plugins_url()
функцию, чтобы указать URL вашего файла Javascript:Создание версий ваших скриптов
Также обратите внимание, что выше мы дали нашему плагину номер версии и передали его в качестве 4-го параметра
wp_enqueue_script()
. Номер версии выводится в источнике в качестве аргумента запроса в URL-адресе сценария и служит для того, чтобы заставить браузер повторно загружать, возможно, кешированный файл в случае изменения версии.Загружайте сценарии только на тех страницах, где это необходимо
Первое правило веб-производительности гласит: « Минимизировать HTTP-запросы», поэтому, по возможности, следует ограничивать загрузку сценариев только при необходимости. Например, если вам нужен только ваш скрипт в админке, ограничьте его страницами администратора, используя
admin_enqueue_scripts
вместо этого ловушку:Загрузите свои скрипты в нижний колонтитул
Если ваши скрипты являются одними из тех, которые должны быть загружены в нижний колонтитул, есть 5-й параметр,
wp_enqueue_script()
который сообщает WordPress отложить его и поместить в нижний колонтитул (при условии, что ваша тема не ведет себя неправильно и что он действительно вызывает хук wp_footer, как и все хорошие темы WordPress должны )Более точный контроль
Если вам нужен более точный контроль, чем у этого, у Ozh есть отличная статья под названием « Как: загрузить Javascript с вашим плагином WordPress», в которой более подробно.
Отключение скриптов для получения контроля
У Джастина Тэдлока есть хорошая статья под названием « Как отключить скрипты и стили, если вы хотите:
Передача значений из PHP в JS с
wp_localize_script()
В своем блоге у Владимира Преловака есть отличная статья, озаглавленная « Лучшие практики по добавлению кода JavaScript в плагины WordPress», в которой он обсуждает использование,
wp_localize_script()
чтобы позволить вам установить значение переменных в вашем PHP на стороне сервера, которое впоследствии будет использоваться в вашем Javascript на стороне клиента.Действительно мелкозернистый контроль с
wp_print_scripts()
И, наконец, если вам нужен действительно детальный контроль, вы можете посмотреть,
wp_print_scripts()
как обсуждалось на Beer Planet в посте, озаглавленном « Как включить CSS и JavaScript условно и только тогда, когда это необходимо в сообщениях» .Epiloque
Вот и все, что касается практики включения файлов Javascript в WordPress. Если я что-то пропустил (что, вероятно, есть), обязательно сообщите мне об этом в комментариях, чтобы я мог добавить обновление для будущих путешественников.
источник
admin_init
вместо того, чтобы проситьis_admin()
. Удалите параметр version, если вы используете Google CDN, иначе в кеше браузера будут храниться две версии: одна без строки запроса с других сайтов и ваша.Чтобы похвалить Майкла за прекрасную иллюстрацию использования enqueues, я просто хочу отметить, что сценарии, включенные как зависимости, не нужно ставить в очередь ...
Я буду использовать пример под заголовком « Сценарии в плагине» в ответе Майка.
Это можно урезать, чтобы прочитать ..
Когда вы устанавливаете зависимости, WordPress найдет и поставит их в очередь для вашего скрипта, поэтому вам не нужно будет делать какие-либо независимые вызовы для этих скриптов.
Кроме того, некоторые из вас могут задаться вопросом, может ли установка нескольких зависимостей привести к выводу скриптов в неправильном порядке, здесь приведу пример
Если сценарий два зависел от сценария три (т.е. сценарий три должен загружаться первым), это не имеет значения, WordPress определит приоритеты постановки в очередь для этих сценариев и выведет их в правильном порядке, короче говоря, все это выполняется автоматически для вас по WordPress.
источник
init
не самое подходящее место для отправки в очередь.Для небольших фрагментов скриптов, которые вы, возможно, не захотите включать в отдельный файл, например, потому что они генерируются динамически, WordPress 4.5 и другие предложения
wp_add_inline_script
. Эта функция в основном привязывает скрипт к другому скрипту.Допустим, например, что вы разрабатываете тему и хотите, чтобы ваш клиент мог вставлять свои собственные скрипты (например, Google Analytics или AddThis) через страницу параметров. Затем вы можете использовать
wp_add_inline_script
этот скрипт для фиксации вашего основного js-файла (скажем такmainjs
):источник
Мой предпочтительный способ - добиться хорошей производительности, поэтому вместо использования
wp_enqueue_script
я использую HEREDOC с Fetch API для асинхронной загрузки всего параллельно:А затем вставьте их в голову, иногда вместе с такими стилями:
В результате получается водопад, который выглядит следующим образом, загружая все сразу, но контролируя порядок выполнения:
Примечание. Для этого необходимо использовать API Fetch, который доступен не во всех браузерах.
источник