无法将脚本排入页脚吗?


10

WordPress Codex

旧的法典页面

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

但是脚本仍包含在头文件中。

有什么建议可以解决吗?

Answers:


18

您将代码放在哪里?

  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', '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_enqueuewp-register_script
janoChen 2012年

4
@ krembo99 wp_register_script()接受相同数量的参数,并且都添加到$wp_scripts全局数组和data子数组中。结合错误信息和答案的可读性,我给您-1(重新制作时将被删除)。
kaiser

1
对我而言<?php wp_footer(); ?>,页面模板中不存在缺少的难题。之后,中的true参数wp_enqueue_script完成了工作。
joehanna '19

6

您正在将布尔值传递给依赖项参数。尝试这个:

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

2
从技术上讲,这是基于问题代码的正确答案。
AndyWarren '18

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 shows这样的格式的数组来声明该函数。


您只需要在需要占位符的地方提供空字符串。
s_ha_dum

是的!当然,仅'',在需要参数而不是可选参数的地方。
Andrew-ThinkUp 2015年

2

如果您将脚本排入页眉,但声明对已排入页脚的脚本的依赖性,则WordPress会将页脚脚本移至页眉,以使其可用于相关脚本。


1

根据WordPress官方文档(最后检查-2018年5月):

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),如果您认为它可以改善,请在下面评论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.