wp_enqueue_script() совсем не работает
Я пытаюсь подключить JavaScript файлы используя wp_enqueue_script(), но это совсем не работает. Вот мой код:
function load_css_js() {
// Подключаем основной CSS файл
wp_enqueue_style('gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css');
// Подключаем файл иконок
wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', true);
// Регистрируем основной JS файл
wp_register_script('gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , true);
// Подключаем зарегистрированный скрипт
wp_enqueue_script('gdgt-base');
}
add_action('wp_enqueue_scripts', 'load_css_js');
Однако, когда я отменяю регистрацию стандартного JavaScript WordPress и регистрирую jQuery из другого источника - всё работает. Что может вызывать эту проблему? Спасибо за помощь!
wp_enqueue_style и wp_enqueue_script принимают множество параметров, и очень важно использовать их в правильном порядке, иначе эти функции не сработают.
Вот полный набор параметров для каждой функции.
wp_enqueue_style( $handle, $src, $deps, $ver, $media );
wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
В вашем wp_enqueue_style вы правильно определяете $handle и $src, но указываете $deps как true, что неверно. То же самое касается и wp_enqueue_script.
Вот исправленная функция.
function load_css_js() {
wp_enqueue_style( 'gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css', false, NULL, 'all' );
wp_enqueue_style( 'gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', false, NULL, 'all' );
wp_register_script( 'gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ), NULL, false );
wp_enqueue_script( 'gdgt-base' );
}
add_action( 'wp_enqueue_scripts', 'load_css_js' );
Для получения дополнительной информации ознакомьтесь с документацией по каждой функции в кодексе.
РЕДАКТИРОВАТЬ: Похоже, что JS-файл загружается, но код в этом файле не работает. (Он работает, если я отключаю стандартный jQuery). | К сожалению, исправленный код не работает :(
DON TOLIVER
Я только что проверил, и всё работает нормально. Думаю, в вашей теме какая-то другая функция переопределяет вывод. Поищите другие функции wp_enqueue_scripts...
Robert hue
Это совершенно другая тема, почему ваш код в JS-файлах не работает. Основная причина, по которой JS-код не работает с базовым jQuery, но работает с внешним jQuery, может заключаться в том, что базовый jQuery запускается в режиме noconflict. А ваш JS-код — нет. Вам нужно изменить ваш JS-код для работы с jQuery в режиме noconflict.
Robert hue
Дело в том, что я загружаю последнюю версию jQuery с http://code.jquery.com/jquery-latest.min.js, и она работает. Так что же может вызывать конфликт?
DON TOLIVER
Вот решение вашей другой проблемы. Почему $ для jQuery не работает?. Переведите ваш код в режим jQuery noconflict, и он заработает.
Robert hue
Большое спасибо, Роберт! Если кто-то еще столкнется с этим, просто используйте: (function($){
$(document).ready(function(){
//your code
});
})(jQuery); :)
DON TOLIVER
Эмм, у меня еще один вопрос. Я заменил false на true для параметра $in_footer, но это не сработало. Я также заглянул в кодекс, и похоже, что в одном из их примеров указано true. Но по какой-то причине у меня это не работает.
DON TOLIVER
Обычно это должно работать, не уверен, почему у вас не получается.
Robert hue
Похоже, вы используете один и тот же хэндл для регистрации скрипта и таблицы стилей. Не уверен, является ли это проблемой, так как один — это CSS, а другой — JS gdgt-base'
Brad Dalton
Для таких же идиотов, как я, решил поделиться здесь. :-)
Я только что потратил час, потому что написал array( '' ) вместо array() в зависимостях.
Просто знайте, что есть разница между:
wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array( '' ), false, true );
и
wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array(), false, true );
... Первый вариант никогда не загрузится. Второй — загрузится. :-)
Ответ @Robert_Hue помог мне найти решение.
При регистрации и подключении скриптов не обязательно вызывать wp_register_script() и wp_enqueue_script() отдельно. Достаточно вызвать только wp_enqueue_script().
Базовый синтаксис wp_enqueue_script:
wp_enqueue_script( string $handle, string $src = '', array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )
Согласно вашему коду, это должно выглядеть так:
function load_css_js() {
wp_enqueue_style('gdgt-base-style', get_template_directory_uri() . '/css/gdgt-base.css');
wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css');
wp_enqueue_script('gdgt-base-script', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , '2019' true);
}
add_action('wp_enqueue_scripts', 'load_css_js');
[подробнее]: https://developer.wordpress.org/reference/functions/wp_enqueue_script/
документация для получения дополнительной информации.