Вопрос или проблема
У меня возникла небольшая проблема, и я не уверен, в чем дело. Я пытаюсь подключить JavaScript в подвале моего сайта на WordPress. Подвал выглядит так:
</footer>
</div>
<?php wp_footer(); ?>
<script>
jQuery(document).foundation();
</script>
</body>
</html>
Подключаемый скрипт ДОЛЖЕН быть помещен в вызов wp_footer, размещая скрипт сразу перед его фактическим вызовом. Но, глядя на исходный код файла, я вижу это:
</footer>
</div>
<script>
jQuery(document).foundation();
</script>
<script type="text/javascript" src="http://www.thetestsite.com/wp-content/themes/cornerstone-4.3.1/js/foundation.min.js?ver=4.3.3"></script>
</body>
</html>
По какой-то причине, обсуждаемый скрипт помещается ПРЯМО ПЕРЕД закрывающим тегом body.
Я проверил, что wp_footer находится на правильном месте, поэтому не уверен, что может послужить причиной этого поведения. Если я подключаю скрипт в заголовке, он работает нормально, но мне просто интересно, почему такое поведение возникает.
ОБНОВЛЕНИЕ (НОВЫЙ КОД): Извините за путаницу. Вот часть functions.php с методом подключения скриптов:
function load_cornerstone_scripts() {
wp_enqueue_script(
'foundation_js',
get_template_directory_uri() . '/js/foundation.min.js',
array('jquery'),
'4.3.1',
true
);
}
add_action('wp_enqueue_scripts', 'load_cornerstone_scripts',0);
Чтобы было ясно…оригинальные два блока кода показывают 1) Как выглядит php файл footer.php, и 2) как отображается исходный код.
Вам нужно что-то вроде этого.
// предполагая, что вы хотите загрузить это только на фронте
if ( ! is_admin() )
add_action( 'wp_enqueue_scripts', 'wpse_112876_load_scripts' );
function wpse_112876_load_scripts() {
wp_enqueue_script( 'my_foundation', get_template_directory_uri() . '/js/foundation.min.js', null, '4.3.3', true );
wp_enqueue_script( 'my_foundation_init', get_template_directory_uri() . '/js/foundation_init.js', array( 'my_foundation' ), null, true );
}
Ответ или решение
Конечно, давайте подробно разберем вашу ситуацию и предложим решение.
Вы упомянули, что при использовании функции wp_enqueue_script()
для добавления JavaScript в нижний колонтитул вашего сайта на WordPress, скрипт выводится перед закрывающим тегом </body>
, а не внутри вызова функции wp_footer()
. Давайте рассмотрим, почему это может происходить и какое решение можно применить.
Причины проблемы
-
Параметр
true
: Вы правильно используете параметрtrue
в функцииwp_enqueue_script()
, который указывает, что скрипт должен быть загружен в нижней части страницы. Это правильный подход, и он должен работать, если все сделано корректно. -
Перенос скриптов в
wp_footer()
: Ваша проблема может заключаться в том, что в вашей теме или плагинах могут быть дополнительные действия, которые изменяют порядок, в котором скрипты загружаются. Также возможно, что какой-то другой плагин или часть кода вашей темы вызывает скрипты внеwp_footer()
. -
Очередность действий: Параметр
0
вadd_action('wp_enqueue_scripts', 'load_cornerstone_scripts', 0)
должен использоваться с осторожностью. Если это не последняя функция, которая добавляет скрипты, другие функции могут добавляться позже и перезаписывать или изменять порядок загрузки.
Решение
Чтобы убедиться, что ваш скрипт правильно добавляется в нижнюю часть, попробуйте выполнить следующие действия:
- Убедитесь, что порядок загрузки скриптов корректен. Попробуйте установить приоритет на более высокий (например, 10), чтобы ваша функция была выполнена позже:
function load_cornerstone_scripts() {
wp_enqueue_script(
'foundation_js',
get_template_directory_uri() . '/js/foundation.min.js',
array('jquery'),
'4.3.1',
true // Размещение внизу страницы
);
}
add_action('wp_enqueue_scripts', 'load_cornerstone_scripts', 10);
-
Проверьте, не конфликтуют ли с вашими скриптами другие плагины или коды тем. Вы можете временно отключить другие плагины и переключиться на стандартную тему, чтобы увидеть, сохраняется ли проблема.
-
Если вы используете собственный код и хотите добавить инициализацию скрипта после загрузки библиотеки Foundation, вы можете добавить еще один enqueue для вашего инициализирующего скрипта, как показано ниже:
function load_cornerstone_scripts() {
wp_enqueue_script(
'foundation_js',
get_template_directory_uri() . '/js/foundation.min.js',
array('jquery'),
'4.3.1',
true
);
wp_enqueue_script(
'foundation_init_js',
get_template_directory_uri() . '/js/foundation_init.js',
array('foundation_js'),
null,
true
);
}
add_action('wp_enqueue_scripts', 'load_cornerstone_scripts', 10);
Заключение
Определив правильный порядок загрузки и убедившись, что ваш код не конфликтует с другими частями сайта, вы сможете решить проблему с размещением скриптов в нижнем колонтитуле.
Если все еще будут возникать сложности, попробуйте проверить вывод с помощью консоли браузера или инструмента разработчика для выявления потенциальных ошибок в JavaScript или конфликтов, которые могут влиять на загрузку скриптов.