Подключаем правильно скрипты js в шаблоне WordPress

Подключать стили и скрипты в шаблон в файле header.php — неправильно.
Правильная практика — подключать их в файле functions.php используя функцию wp_enqueue_scripts, это позволит избежать конфликтов и без лишних проблем объединять JS файлы в один.

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

Подключаем файлы скриптов .js через functions.php

jQuery регистрируется в WP по умолчанию. Поэтому для его подключения достаточно одной строки:

wp_enqueue_script('jquery');

Зарегистрировать и подключить новый скрипт (скрипт подключится в <head>):

wp_enqueue_script('modernizr-js', get_template_directory_uri() . '/libs/modernizr/modernizr.js');

Чтобы подключить скрипт в футере после основного содержимого, можно использовать такой формат:

wp_enqueue_script('modernizr-js', get_template_directory_uri() . '/libs/modernizr/modernizr.js', array(), false, true);

jQuery можно не подключать дополнительно, если один из скриптов указывает на зависимость от jQuery array('jquery'), то есть библиотека jQuery подключится вместе с этим скриптом.

Кстати, библиотека jQuery подключается в <head> из-за того, что много других скриптов и плагинов зависят от нее, и поэтому она должна быть подключена в первую очередь.

Использование

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

Шаблон использования

add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
function my_scripts_method(){
  wp_enqueue_script( 'newscript', get_template_directory_uri() . '/js/custom_script.js');
}

Параметры

$handle (строка) (обязательный)
Название скрипта (рабочее название). Строка в нижнем регистре.
Если строка содержит знак вопроса (?): scriptaculous&v=1.2, то предшествующая часть будет названием скрипта, а все что после будет добавлено в УРЛ как параметры запроса. Так можно указывать версию подключаемого скрипта.

$src (строка)
УРЛ файла скрипта. Например: http://example.com/wp-content/themes/my-theme/my-theme-script.js.
Этот параметр необходим только, когда скрипт не зарегистрирован и WordPress еще не знает об этом скрипте, смотрите функцию wp_register_script().
Не нужно писать УРЛ жестко, он должен определяться динамически. Для этого используйте функции получения URL:
plugins_url() — для плагинов
get_template_directory_uri() — для тем.
Ссылки на внешние скрипты можно указывать без указания протокола: //otherdomain.com/js/their-script.js.
Уже зарегистрированные в WP скрипты смотрите ниже в этой статье.
По умолчанию: false

$deps (массив)
Массив названий скриптов от которых зависит этот скрипт; скрипты которые должны быть загружены перед этим скриптом. Этот параметр необходим только в случае, если WordPress еще не знает об этом скрипте.
По умолчанию: array()

$ver (строка)
Строка указывающая версию скрипта, если она у него есть. Этот параметр используется для того чтобы удостовериться, что клиент получил верную версию скрипта, а не из кеша.
Если параметр не указан, то в качестве версии скрипта будет использована версия WordPress.
Если указать null, то никакая версия не будет добавлена.
По умолчанию: false

$in_footer (логический)
Подключить скрипт в подвал?
Обычно скрипт подключается в <head> документа, если указать true, то скрипт будет подключен перед тегом </body>, точнее там где вызывается тег шаблона wp_footer().
Если из-за зависимости от других скриптов нет возможности подключить текущий скрипт в подвале, то значение этой переменой будет проигнорировано.
Для понятного чтения кода, вместо true можно указать любую строку, например 'in_footer'.
По умолчанию: false

Рабочий пример

Примерно в таком формате я подключаю скрипты на своих сайтах.

/* Load Scripts */
function crea_load_scripts()
{
  // подключаем скрипт modernizr.js в <head>
  wp_enqueue_script('modernizr-js', get_template_directory_uri() . '/libs/modernizr/modernizr.js', array(), NULL, true);
  // вместо библиотеки jQuery из состава WordPress подключаем её CDN-копию (только при острой необходимости)
  wp_deregister_script( 'jquery' );
  wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', array(), NULL, false);
  wp_enqueue_script( 'jquery' );
  // подключаем bootstrap.min.js с внешнего CDN-хранилища
  wp_enqueue_script('bootstrap-js', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js', array(), NULL, true);
  // подключаем скрипт common.js из нашего локального шаблона и указываем его зависимость от jQuery
  wp_enqueue_script('common-js', get_template_directory_uri() . '/js/common.js', array('jquery'), NULL, true);
}

add_action('wp_enqueue_scripts', 'crea_load_scripts', 10);

Число «10» в этой строке add_action('wp_enqueue_scripts', 'crea_load_scripts', 10); позволяет подключать наши скрипты в самую последнюю очередь после всех скриптов других плагинов.

Пример, как подключить скрипт для определенной страницы

add_action( 'template_redirect', 'my_custom_readmore_script' );

function my_custom_readmore_script() {
  if ( is_page_template('template-best-reviews.php') ) {
    wp_enqueue_script( 'readmore-script', get_template_directory_uri().'/js/readMore.js', array( 'jquery' ), false, true );
  }
}

Более подробно — здесь https://wp-kama.ru/function/wp_enqueue_script.

Подключаем правильно файлы стилей css в шаблоне WordPress

Подключать стили в шаблон в файле header.php — неправильно. Правильная практика — подключать их в…

Что нового в WordPress 4.9

15 ноября 2017 года был выпущен WordPress версии 4.9, названный в честь джазового музыканта Билли…

Создаем виджеты в шаблоне на CMS WordPress

Регистрируем панель виджетов, в которую потом будем размещать виджеты на сайте, я обычно использую такие…

Добавляем меню в свой шаблон на CMS WordPress

Регистрируем и выводим произвольное меню, созданное в панели: «Внешний вид > Меню» (Appearance > Menus)….

4 комментария

Нурик

Спасибо. правильное подключение сразу убивает лишние баги. Например у меня в хедере тусили vue стайлы. После верного подключения все встало как положено

Денис выводите больше таких вот статей))

Спасибо за ответ! И успехов)

При нажатии кнопки заказать на главной странице сайта выполняется редирект на страницу авторизации в панель администратора. какого скрипта не хватает? подскажите

Скорее всего вы в основном файле скриптом неправильно задали какую-то функцию, вряд ли проблема в недостатке скриптов.
Покажите ссылку, можно посмотреть.

Ответить