Не можете поставить в очередь скрипты в нижнем колонтитуле?

10

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

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

$ in_footer

(булево) (необязательно) Обычно сценарии размещаются в разделе. Если этот параметр имеет значение 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');

Но сценарии все еще включены в заголовок.

Любые предложения, чтобы это исправить?

janoChen
источник

Ответы:

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

НАПРИМЕР

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

krembo99
источник
Спасибо, что это работает сейчас, но я понял, что размещение trueили wp_enqueueлибо wp-register_scriptработает просто отлично.
janoChen
4
@ krembo99 wp_register_script()Принимает одинаковое количество аргументов и добавляет в $wp_scriptsглобальный массив и dataвложенный массив . Объединив неверную информацию с отличной читабельностью вашего ответа, я дам вам -1 (будет удален при переделке).
Кайзер
1
Для меня отсутствующий кусок головоломки <?php wp_footer(); ?>не существовал в шаблоне страницы. После этого trueпараметр in wp_enqueue_scriptсделал свое дело.
Иоанна
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();?>
ImFarhad
источник
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.

Andrew-ThinkUp
источник
Вы должны предоставлять пустые строки только там, где нужны заполнители.
s_ha_dum
О да! Конечно, только '',там , где параметры обязательны, не обязательно.
Andrew-ThinkUp
2

Если вы ставите скрипт в заголовок, но объявляете зависимость от скрипта, поставленного в нижний колонтитул, WordPress переместит скрипт нижнего колонтитула в заголовок, чтобы сделать его доступным для зависимых скриптов.

user3765755
источник
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 ), если вы думаете, что его можно улучшить, пожалуйста, прокомментируйте ниже.

SergeDirect
источник