Как добавить javascript перед закрывающим тегом body в футере WordPress

4 мая 2012 г., 17:56:55
Просмотры: 35.4K
Голосов: 9

Я следую советам других пользователей о добавлении js файла перед закрывающим тегом body, но у меня это не работает.

Не могли бы вы проверить мой код?

<?php
  /*загрузить js файл в футер*/
  function myscript() 
  {
   if( wp_script_is( 'jquery', 'done' ) ) {
  ?>
     <script type="text/javascript" src="js/scripts.js"></script>
  <?php
  }
 }
  add_action( 'wp_footer', 'myscript' );
?>

Большое спасибо

РЕДАКТИРОВАТЬ:------------------------------------------------

Это короткое решение.. <script language="javascript" src="<?php bloginfo('template_directory'); ?>/js/scripts.js"></script>

но это не правильный ответ, верно?

РЕДАКТИРОВАТЬ---------------------------------------------------

Вот что я пытаюсь сделать, основываясь на примерах из WP codex и ваших замечаниях Fischi, но думаю, что всё еще делаю что-то неправильно..

function my_scripts_method() {
wp_enqueue_script(
    'myscript',
    get_bloginfo('template_directory') . '/js/scripts.js',
    array( 'jquery' ), 
    '', 
    true
);
 }    

 add_action('wp_enqueue_scripts', 'my_scripts_method');

Файл всё еще не загружается в футер.

2
Комментарии

Файл не загружается - это означает, что теги <script> не появляются в подвале - или скрипт не может быть найден? И наконец, вызывает ли ваша тема функцию wp_footer();

Stephen Harris Stephen Harris
4 мая 2012 г. 21:00:00

Привет, Stephen. Моя тема использует <?php get_footer(); ?>. Давай попробую wp_footer(); и отпишусь о результате. Спасибо!

SixfootJames SixfootJames
5 мая 2012 г. 07:32:55
Все ответы на вопрос 1
4
19

Вы всегда должны добавлять javascript (и стили) с помощью WordPress функции wp_enqueue_script()

Работает это так:

wp_enqueue_script( 
 $handle // имя вашего подключаемого файла, в вашем случае 'myscript'
,$src    // источник вашего файла, может быть внешним, или для вашего примера: get_bloginfo('template_directory') . '/js/scripts.js'
,$deps   // зависит ли ваш javascript от другого javascript файла? например, jquery? передайте массив аргументов, указывающих все зависимости: array( 'jquery' )
,$ver   // номер версии вашего javascript
,$in_footer // вот что вам нужно: true
);

После установки $in_footer в true, файл подключается в действии wp_footer(), обычно прямо перед закрывающим тегом </body>.

Итак, для вас:

wp_enqueue_script( 'myscript', get_bloginfo('template_directory') . '/js/scripts.js', array( 'jquery' ), '', true );

решает задачу.

Примечание: Не все темы (хотя все темы должны) вызывают wp_footer(); в своем футере / непосредственно перед закрывающим тегом </body>.

4 мая 2012 г. 18:05:17
Комментарии

Большое спасибо, Fischi. Смотрите мою правку выше... Комментарии StackExchange отстойно отображают чистую разметку.

SixfootJames SixfootJames
4 мая 2012 г. 19:39:52

Привет, Fischi. Моя тема использует <?php get_footer(); ?>. Я пробовал wp_footer(); но это не сработало - футер вообще не отображался.

SixfootJames SixfootJames
5 мая 2012 г. 12:18:41

@SixfootJames без проблем. Обратите внимание, что разница между get_footer() и wp_footer() в том, что get_footer() подключает файл шаблона footer.php, тогда как wp_footer() - это действие WordPress для вставки всего JavaScript и стилей, которые должны отображаться в футере. Обычно wp_footer() располагается в footer.php, прямо перед закрывающим тегом </body>.

fischi fischi
5 мая 2012 г. 17:05:45

Как упомянул Стивен Харрис, не все темы вызывают wp_footer(). Если ваша тема не вызывает эту функцию, вставьте её перед закрывающим тегом </body>.

fischi fischi
5 мая 2012 г. 17:07:08