Не удается подключить скрипты в футере?

5 янв. 2012 г., 06:58:04
Просмотры: 60.3K
Голосов: 11

В WordPress Codex говорится:

(старая страница документации)

$in_footer

(boolean) (необязательно) Обычно скрипты размещаются в секции head. Если этот параметр установлен как true, скрипт размещается внизу страницы. Для этого требуется, чтобы тема имела хук wp_footer() в соответствующем месте. Обратите внимание, что вы должны поставить скрипт в очередь до выполнения wp_head, даже если он будет размещен в футере. (Появилось в WordPress 2.8) По умолчанию: false

Поэтому я добавил true после каждого src path скрипта:

/**
     * JavaScript
     */

    function my_scripts_method() {
        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js', true );
        wp_enqueue_script( 'jquery' );
    }

    add_action('wp_enqueue_scripts', 'my_scripts_method');

    function media_queries_script() {
        wp_register_script( 'mediaqueries', get_template_directory_uri() . '/js/css3-mediaqueries.js', true );
        wp_enqueue_script( 'mediaqueries' );
    }

    add_action('wp_enqueue_scripts', 'media_queries_script');

    function custom_script() {
        wp_register_script( 'custom', get_template_directory_uri() . '/js/custom.js', true );
        wp_enqueue_script( 'custom' );
    }

    add_action('wp_enqueue_scripts', 'custom_script');

    function replace_script() {
        wp_register_script( 'replace', get_template_directory_uri() . '/js/jquery.ba-replacetext.min.js', true );
        wp_enqueue_script( 'replace' );
    }

    add_action('wp_enqueue_scripts', 'replace_script');

Но скрипты все равно подключаются в шапке.

Есть какие-нибудь предложения по исправлению?

0
Все ответы на вопрос 6
3
21

Куда вы поместили свой код?

  1. Аргумент "true" указывается в wp_register_script();, а не в wp_enqueue_script();

Функция выглядит так:

<?php wp_enqueue_script('handle', 'src', 'deps', 'ver', 'in_footer'); ?>

что означает

    <?php wp_enqueue_script('NameMySccript', 'path/to/MyScript', 
'dependencies_MyScript', 'VersionMyScript', 'InfooterTrueorFalse'); ?>

Например:

<?php wp_enqueue_script('my_script', WP_CONTENT_URL . 'plugins/my_plugin/my_script.js', array('jquery', 'another_script'), '1.0.0', true); ?>

  1. Есть ли в вашей теме вызов <?php wp_footer(); ?> в конце страницы?

3. Добавьте действие с помощью add_action('wp_print_scripts', 'ваша_функция');

Учитывая вышесказанное, лучшей практикой будет:

<?php  
if (function_exists('load_my_scripts')) {  
    function load_my_scripts() {  
        if (!is_admin()) {  
        wp_deregister_script( 'jquery' );  
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js');  
        wp_enqueue_script('jquery');  
        wp_register_script('myscript', bloginfo('template_url').'/js/myScript.js'__FILE__), array('jquery'), '1.0', true );  
        wp_enqueue_script('myscript');  
        }  
    }  
}  
add_action('init', 'load_my_scripts');  
?>  

или add_action('wp_print_scripts', 'dl_register_js');

5 янв. 2012 г. 08:21:04
Комментарии

Спасибо, теперь всё работает, но я понял, что указание true в любом из функций wp_enqueue или wp-register_script работает одинаково хорошо.

wyc wyc
5 янв. 2012 г. 17:43:18

@krembo99 Функция wp_register_script() принимает такое же количество аргументов, и обе добавляют скрипты в глобальный массив $wp_scripts и подмассив data. Учитывая неверную информацию в сочетании с ужасной читаемостью вашего ответа, я вынужден поставить вам -1 (будет удалено при переработке).

kaiser kaiser
5 янв. 2013 г. 19:07:23

Мне не хватало ключевого элемента — <?php wp_footer(); ?> отсутствовал в шаблоне страницы. После его добавления параметр true в wp_enqueue_script начал работать как положено.

joehanna joehanna
22 апр. 2019 г. 04:34:23
1

Вы передаёте булево значение в параметр зависимостей. Попробуйте так:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
5 янв. 2012 г. 08:21:17
Комментарии

Это технически правильный ответ на его вопрос, основанный на коде из вопроса.

AndyWarren AndyWarren
15 февр. 2018 г. 22:29:52
0

У меня была такая же проблема, и после некоторых поисков я обнаружил, что в моей пользовательской теме не хватало этой функции:

<?php wp_footer();?>
15 окт. 2018 г. 15:21:39
2

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

Я пытался..

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js',  true);

Что не сработало, как заметил @janoChen. WordPress ожидает следующую сигнатуру:

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

Поэтому вам нужно указать '', для параметров, которые вы не используете, если хотите объявить функцию в одну строку. Таким образом, следующий код работает как задумано:

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js', '', '', true);

Впоследствии вы можете объявить функцию в формате массива, как показывает @Brian Fegter.

10 сент. 2014 г. 18:33:19
Комментарии

Вам нужно указывать пустые строки только там, где требуются заполнители.

s_ha_dum s_ha_dum
30 сент. 2015 г. 17:59:09

Ах да! Конечно, только '', там, где параметры обязательны, а не опциональны.

Andrew-Sepic Andrew-Sepic
1 окт. 2015 г. 21:45:41
0

Если вы подключаете скрипт в заголовок (header), но указываете зависимость от скрипта, который подключён в подвал (footer), WordPress переместит скрипт из подвала в заголовок, чтобы сделать его доступным для зависимого скрипта/скриптов.

25 мар. 2015 г. 04:24:40
0

Согласно официальной документации WordPress (Последняя проверка - май 2018):

https://developer.wordpress.org/reference/functions/wp_enqueue_script/

и личному опыту более 7 лет.

  1. Вы всегда должны стараться использовать функцию 'wp_enqueue_scripts' для лучшей совместимости с установленными плагинами/темами.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
    
  2. Вы можете найти больше информации об использовании в официальной документации Использование здесь

       /**** wp_register_script, wp_enqueue_script, wp_dequeue_script ***
    
             *** Личная рекомендация
             *  - Я настоятельно рекомендую регистрировать все скрипты перед подключением,
             *  опять же -> для лучшей совместимости с другими разработчиками.
             *  :::: Например, чтобы другие могли управлять позицией
             *       ваших скриптов, используя метод wp_dequeue_*type*.
             *       (wp_dequeue_script, wp_dequeue_style,...)
    
             *** Официальная документация
             *   $in_footer
             *      - (bool) (Опционально) Подключать ли скрипт перед </body> вместо <head>. По умолчанию 'false'.
             *      - Значение по умолчанию: false
             *
             ***/
    
             // примеры:
    
      function your_plugin_enqueue(){
    
    
    
             wp_dequeue_script('some_script(s)'); // удалить конфликтующий скрипт
    
             wp_register_script( $handle, $src, $deps, $ver, $in_footer=true ); 
             wp_enqueue_script($handle);
             wp_register_script('some_script(s)', $src, $deps, $ver, $in_footer=true);  // повторно подключить скрипты после вашего, например, для устранения конфликтов
    
             wp_enqueue_script('some_script(s)');
    
      }
    
    
      add_action('wp_enqueue_scripts','your_plugin_enqueue');
    

P.S. Если вы считаете этот ответ полезным, пожалуйста, поставьте '▲' (Стрелка вверх), если вы думаете, что его можно улучшить, пожалуйста, оставьте комментарий ниже.

16 мая 2018 г. 11:36:41