#javascript #php #jquery #wordpress #wordpress-theming
Вопрос:
У меня есть файл js с именем «main.js» и я поставил его в очередь, используя wp_enqueue_script в function.php файл. Этот файл загружается на мою страницу-{slug}.php, но функции в нем вообще не выполняются.
В function.php файл:
function df_enqueue_scripts() {
wp_enqueue_script( 'main-js', get_template_directory_uri() . '/assets/src/library/js/main.js', array(), '1.0', true );
wp_enqueue_script( 'bootstrap-js', get_template_directory_uri() . '/assets/src/library/js/bootstrap.min.js', array( 'jquery' ), '5.6', true );
}
// Register the df_enqueue_scripts with wp_enqueue_scripts hook.
add_action( 'wp_enqueue_scripts', 'df_enqueue_scripts' );
страница-{slug}.php файл:
<?php
get_header();
?>
<button type="button" id="ad-button">Ad</button>
<button type="button" id="mm-button">MM</button>
<button type="button" id="photo-button">Photography</button>
<div id="display-photo"></div>
<div id="display-mm"></div>
<div id="display-ad"></div>
<?php
get_footer();
main.js файл:
$( '#photo-button' ).on( 'click',
function () {
$( '#display-photo' ).html("Hello <b>world!</b>");
}
);
Короче говоря, я пишу все, что в main.js файл, изменения, которых я ожидаю, не происходят или не отражаются на моей странице-{slug}.php файл.
Комментарии:
1.
#photo-button
Существует ли элемент в момент выполнения этого кода? Вы пробовали обернуть код в обработчик document.ready jQuery и проверили, не меняет ли это что-нибудь?2. Все, о чем упоминал @CBroe, также проверили ли вы консоль Javascript вашего браузера для отладки возможных ошибок/предупреждений?
3. @CBroe Да, кнопка #фото действительно существует. а также попытался завернуть код в обработчик document.ready jQuery. Но ничего не помогало
Ответ №1:
Я думаю, проблема с неправильным использованием jQuery. Вероятно, обертывание функции с помощью jQuery позволяет использовать переменную $ и может решить проблему
jQuery(function($){
$( '#photo-button' ).on( 'click',
function () {
$( '#display-photo' ).html("Hello <b>world!</b>");
}
);
})
Вторая необходимая вещь-установить jQuery в качестве зависимости для
вашего сценария и обновить версию сценария до 1.1.
wp_enqueue_script( 'main-js', get_template_directory_uri() . '/assets/src/library/js/main.js', array( 'jquery' ), '1.1', true );
Комментарии:
1. Я изменил версию с 1.0 на 1.1, и это сработало. Спасибо за решение. Я рад, что ошибка была устранена, но я не понимал, почему версия 1.0 не работала, а версия 1.1 работала
2. Это связано с кэшированием браузера. При изменении версии скрипта — браузер обновляет кэш скриптов. WordPress добавляет параметр GET в URL-адрес скрипта. И после изменения вашего сценария вы должны увеличить версию своего сценария. Например, 1.1 1.2. 2.0 и т.д…
3. о… Я понял. Это была проблема с кешем. Поэтому для каждого отдельного изменения в моем js-скрипте мне также нужно изменить номер версии скрипта.