10

The WordPress codex says:

(old codex page)

$in_footer

(boolean) (optional) Normally scripts are placed in the section. If this parameter is true the script is placed at the bottom of the . This requires the theme to have the wp_footer() hook in the appropriate place. Note that you have to enqueue your script before wp_head is run, even if it will be placed in the footer. (New in WordPress 2.8) Default: false

So I added true after each script's 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');

But the scripts are still being included in the header.

Any suggestions to fix that?

17

Where did you put your code ?

  1. the "true" arguments goes in the wp_register_script();, not the wp_enqueue_script() ;

the functions is:

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

meaning

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

E.G.

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

  1. does your theme have <?php wp_footer(); ?> at the end of the page ?

3.add the action with add_action('wp_print_scripts', 'your function');

That being said , your best practice would be :

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

or add_action('wp_print_scripts', 'dl_register_js');

  • Thanks it is working now but I realized that placing the true in either wp_enqueue or wp-register_script work just fine. – janoChen Jan 5 '12 at 15:43
  • 4
    @krembo99 The wp_register_script() takes the same amount of arguments and both add to the $wp_scripts global array and the data subarray. Combined the wrong information with the awfull readability of your answer, I've to give you a -1 (will be removed on rework). – kaiser Jan 5 '13 at 17:07
  • For me the missing piece of the puzzle was <?php wp_footer(); ?> did not exist in the page template. After that, the true parameter in wp_enqueue_script did its job. – joehanna Apr 22 at 1:34
6

You are passing a bool value to the dependency param. Try this:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
  • 2
    This is technically the right answer for his question based on the code in the question. – AndyWarren Feb 15 '18 at 20:29
4

I had the same problem and after doing some search I was missing this function in my custom theme:

 <?php wp_footer();?>
3

I'd like to simplify the answer here.. When using wp_enqueue_script or wp_register_script to load a script in the footer, you need to make sure you include the other params too, even if they are blank.

I was trying..

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

Which didn't work as @janoChen has noticed. Wordpress calls for

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

So you need to include '', for the parameters you are not using if you want to declare the function inline. Therefore the code below works as planned.

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

Subsequently you can declare the function in an array like format like @Brian Fegter shows.

  • You need to provide the empty strings only where placeholders are needed. – s_ha_dum Sep 30 '15 at 14:59
  • Ah yes! Of Course, only '', where parameters are required, not optional. – Andrew-ThinkUp Oct 1 '15 at 18:45
2

If you enqueue a script to the header but declare a dependency to a script enqueued to the footer, WordPress will move the footer script to the header to make it available to the dependent script/s.

1

According to the official WordPress documentation (Last Checked - May 2018):

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

and personal experience of 7+ years.

  1. You should try always use 'wp_enqueue_scripts' function for better compatibility with installed plugins/themes.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
    
  2. You can find more about using official docs Usage here

       /**** 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');
    

P.S. If you find this answer useful, please give it an '▲' (ArrowUP), if you think that it can be improved, please comment below.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.