【问题标题】:How to load the jQuery provided by WordPress in the footer?如何在页脚中加载 WordPress 提供的 jQuery?
【发布时间】:2014-02-20 15:09:35
【问题描述】:

wp_enqueue_script 中将$in_footer 参数设置为true 会在页脚中加载一个脚本。如果我要添加一个新脚本,那就太好了。但是,WordPress 已经默认提供了一个 jQuery 版本,并且它被排在了文档头中。

如何将 WordPress 提供的 jQuery 从页眉移动到页脚?

【问题讨论】:

标签: php jquery wordpress


【解决方案1】:

您需要注销现有查询并重新注册以加载到页脚中。

function jquery_in_footer() {
    if (!is_admin()) {
        wp_deregister_script('jquery');

        // load the local copy of jQuery in the footer
        wp_register_script('jquery', home_url(trailingslashit(WPINC) . 'js/jquery/jquery.js'), false, null, true);


        wp_enqueue_script('jquery');
    }
}
add_action('init', 'jquery_in_footer');

请记住,如果您有任何其他依赖于 jQuery 且未加载到页脚中的脚本,WordPress 仍会在页眉中加载 jQuery 以满足该依赖关系。

(改编自http://www.ericmmartin.com/5-tips-for-using-jquery-with-wordpress/

编辑:如果你真的想发疯,你可以直接修改 WP_Scripts 对象,但是你依赖于永远不会改变的实现。我想在他们考虑将 jquery.js 的位置移到 wp-includes 之前,这种情况会发生变化:)

但只是为了好玩……

function load_jquery_footer() {
    global $wp_scripts;
    $wp_scripts->in_footer[] = 'jquery';
}
add_action('wp_print_scripts', 'load_jquery_footer');

【讨论】:

  • 我想过注销然后重新注册。这种方法的问题是您重新注册的版本与 WP 在未来版本中使用的版本不同。我希望有一个过滤器可用,它可以让您保留使用的 jQuery 版本,但可以将 $in_footer 参数更改为 true?您添加的链接和有关依赖脚本的信息非常宝贵!谢谢!
  • 这就是home_url(trailingslashit(WPINC) . 'js/jquery/jquery.js') 的用武之地。它在 wp-includes 中加载版本。
  • 酷,我没有看到 WPINC 常量。再次感谢!
  • 我注意到一件事 - 你不应该使用 array() 作为 wp_register_script 中的第三个参数而不是 false 吗?
  • 在 WordPress 4.6.1 中,jquery 依赖于 jquery-core 和 jquery-migrate。所以我不得不修改函数,只是删除了 jquery 的 dereg 并添加了:wp_deregister_script('jquery-core') & wp_deregister_script('jquery-migrate'),然后我重新注册了 jquery-core wp_register_script('jquery-core', '/wp-includes/js/jquery/jquery.js', false, null, true) 和 jquery-migrate wp_register_script('jquery-migrate', '/wp-includes/js/jquery/jquery-migrate.min.js', false, null, true)。当您将 jquery 加入队列时,它会将 jquery-core 和 jquery-migrate 加载到页脚中。
【解决方案2】:

也许defer 属性会有所帮助。关于这个话题有一个很好的article。 我使用以下代码方便地非阻塞加载任何脚本,而不仅仅是 jQuery。

// Defer scripts.
function dt_add_defer_attribute( $tag, $handle ) {
    $handles = array(
        'jquery-core',
        'jquery-migrate',
        'fancybox',
    );
    foreach( $handles as $defer_script) {
        if ( $defer_script === $handle ) {
            return str_replace( ' src', ' defer src', $tag ); // Or ' async src'
        }
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'dt_add_defer_attribute', 10, 2 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 2019-02-03
    • 2018-04-02
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多