Не можете запускати сценарії у нижньому колонтитулі?


10

Кодекс WordPress говорить :

( стара сторінка кодексу )

$ in_footer

(булева) (необов’язково) Зазвичай сценарії розміщуються у розділі. Якщо цей параметр вірно, сценарій розміщується внизу. Для цього потрібна тема, щоб 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');

Але сценарії все ще включаються до заголовка.

Будь-які пропозиції виправити це?

Відповіді:


18

Де ви поставили свій код?

  1. "правдиві" аргументи йдуть у 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'); ?>

EG

<?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', 'your function');

Як сказано, вашою найкращою практикою буде:

<?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');


Завдяки вона працює зараз , але я зрозумів , що розміщення trueв будь-якому wp_enqueueабо wp-register_scriptроботі просто відмінно.
janoChen

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

1
Для мене відсутній фрагмент головоломки <?php wp_footer(); ?>не існував у шаблоні сторінки. Після цього trueпараметр в wp_enqueue_scriptзробив свою роботу.
joehanna

6

Ви передаєте значення bool параметру залежності. Спробуйте це:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);

2
Це технічно правильна відповідь на його питання на основі коду у питанні.
AndyWarren

4

У мене була така ж проблема, і після деякого пошуку мені не вистачало цієї функції в моїй спеціальній темі:

 <?php wp_footer();?>

3

Тут я хотів би спростити відповідь. Коли ви використовуєте 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.


Потрібно вказати порожні рядки лише там, де потрібні заповнювачі.
s_ha_dum

Ага так! Звичайно, лише '',там, де потрібні параметри, не обов’язково.
Andrew-ThinkUp

2

Якщо ви додасте скрипт до заголовка, але оголосите залежність від скрипту, приєднаного до нижнього колонтитулу, WordPress перемістить сценарій нижнього колонтитула до заголовка, щоб зробити його доступним для залежного сценарію.


1

Згідно з офіційною документацією 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 ***
    
             *** Personal recommendation
             *  - I strongly recommend registering all scripts before enqueueing,
             *  again -> for better compatibility with other developers. 
             *  :::: For example, so others could manipulate the position 
             *       of your scripts using the wp_dequeue_*type* method. 
             *       (wp_dequeue_script, wp_dequeue_style,...)
    
             *** Official Docs
             *   $in_footer
             *      - (bool) (Optional) Whether to enqueue the script before </body> instead of in the <head>. Default 'false'.
             *      - Default value: false
             *
             ***/
    
             // examples:
    
      function your_plugin_enqueue(){
    
    
    
             wp_dequeue_script('some_script(s)'); // remove conflicting script
    
             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);  // re-enqueue scripts after yours for example to elimination of conflicts
    
             wp_enqueue_script('some_script(s)');
    
      }
    
    
      add_action('wp_enqueue_scripts','your_plugin_enqueue');
    

PS Якщо ви вважаєте, що ця відповідь є корисною, будь ласка, дайте їй «▲» ( ArrowUP ), якщо ви думаєте, що її можна вдосконалити, будь ласка, прокоментуйте нижче.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.