如何在Wordpress页脚回退之前加载jQuery

时间:2014-03-05 13:15:52

标签: wordpress scripting cdn

我将一堆脚本排入页面的页脚:

function core_scripts() { 

    wp_deregister_script('jquery'); 

    wp_register_script('jquery', '//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js', false, null, true);

    wp_register_script('bootstrap', '//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js', array('jquery'), '3.1.1', true);

    wp_register_script('flexslider', get_template_directory_uri().'/js/jquery.flexslider-min.js', array('jquery'), '2.2.2', true); 

    wp_register_script('jqzoom', get_template_directory_uri().'/js/jquery.jqzoom-core-pack.js', array('jquery'), '2.3', true); 

    wp_register_script('fancybox', get_template_directory_uri().'/js/jquery.fancybox.pack.js', array('jquery'), '2.1.5', true); 
    ... a bunch of others ...
}
add_action('init', 'core_scripts'); // Add Custom Scripts 


function write_site_scripts()
{
    wp_enqueue_script('jquery'); 
    wp_enqueue_script('bootstrap');
    wp_enqueue_script('flexslider');
    wp_enqueue_script('jqzoom');
    wp_enqueue_script('fancybox'); 
    ...etc...
}
add_action('wp_enqueue_scripts', 'write_site_scripts'); // write all enqueued scripts

function write_custom_scripts()
{   
    $html = "<!-- Custom script -->
    <script>
    var custom = '1';
    </script>";
    echo $html;
}
add_action('wp_footer', 'write_custom_scripts'); // this script writes in the footer before the dependent js scripts

我的问题是自定义脚本总是在jQuery脚本之前写入页面,我猜是因为自定义脚本是通过echo write命令写入页面的。

如何在将jQuery脚本写入页面后将自定义javascript代码添加到页脚中?即。我需要延迟add_action('wp_footer','write_custom_scripts');要在稍后执行,或者我如何使用enqueue添加自定义JavaScript?

注意我已经删除了之前发布的CDN代码,因为这会引导所有人进行另一次讨论 - 一个有效的讨论,但这不是我现在所处理的问题。

1 个答案:

答案 0 :(得分:2)

编辑II

因为问题本质上已经多次改变,并且为了使你免于阅读(例如 - 理解)以下所有长篇解释,只需使用。

add_action('wp_footer', 'write_custom_scripts',9999);

这会将优先级设置为非常高,最后会probably回显您的代码(除非您或其他插件/主题开发人员使用更高优先级或更高版本的过滤器..)

对于那些想要做正确方法的人:

function my_javascripts() {
    wp_enqueue_script('the-script-handle', 
                      'path/to/file.js', 
                      array('jquery','other_script_that_we_depend_on'), 
                      'scriptversion eg. 1.0', 
                      true);
}
add_action('wp_enqueue_scripts', 'my_javascripts');

当你将上面的脚本(正确的方式)排队时,你可以看到它wp_enqueue_script()有4个参数。pathdependenciesversion和{ {1}}。

这是加载脚本的唯一正确方法,如果需要,只需将jquery排队到同一个函数 - wp将确保它首先加载。

依赖关系意味着wp不会加载你的脚本,因为jQuery已经加载了,并且会尝试加载jQuery FIRST ......

LAST参数实际上将定义天气以在FOOTER(TRUE)或标题中加载脚本(FALSE)

话虽如此,你总是可以在HEADER中加载jQuery而不是页脚(但不是那么推荐)

之后,对于脚本的最后一位,您可以在页脚中回显它,还可以控制添加它的方式和时间。

我不明白,是你方法的总体目标。 (这部分是关于“做错了”)

首先 - 我认为从CDN加载并不是一个好的IDEA。我是NOT ALONE。在没有任何有意义的专业人士的WP中被认为是一个不好的做法(时间问题是一个笑话,因为你可能会直接加载很多其他脚本并且脚本被缓存)。

在做这件事的时候 - 你想到一个后备是好的,但回退应该是wp自己的版本 - 而不是你自己包含的版本。

如果你仍然坚持做错了,你总是可以做一些事情(或者只是改变执行顺序):

in-footer

这基本上允许你在wp_footer动作之前或之后回复你的东西而且技术上它会起作用 - 。它仍然是错误的。

编辑我问题编辑后。

您在该代码中遇到了几个问题。

  1. 您正在使用为WP保留的句柄 remove_action('wp_head', 'wp_print_scripts'); remove_action('wp_head', 'wp_print_footer_scripts', 9); remove_action('wp_head', 'wp_enqueue_scripts', 1); // your stuff add_action('wp_footer', 'wp_print_scripts', 5); add_action('wp_footer', 'wp_enqueue_scripts', 5); add_action('wp_footer', 'wp_print_footer_scripts', 5); 注册jQuery(CDN)。
  2. 如果你想这样做(你不应该这样做,请不要)你需要在再次注册之前取消注册jquery。

    jquery

    再次。我不能强调这是多么错误。

    2。你是整个剧本的一大堆 - 但你在哪里排队?

    3。再次。喜欢在评论中(我认为你还是不明白)

    如果你有一个脚本要添加到页脚 - 你需要注册并使用依赖项将其排队..(正确的方法)

    根据编辑问题:

    创建一个名为my_script.js的文件

    <?php wp_deregister_script( 'jquery' ); ?>
    

    排队!

    var custom = '1';
    

    在这种情况下,您的脚本将加载您列出的依赖项... 你要做的就是直接回应。

    关于如何正确传递变量的评论 - read here

    你也可以这样做(对象):

    wp_enqueue_script('the-script-handle', 
                          'path/to/my_script.js', 
                          array('jquery','other_script_that_we_depend_on'), 
                          '0.0.1', 
                          true);
    
相关问题