无法将wordpress jquery库移动到页脚

时间:2013-12-04 01:34:23

标签: jquery wordpress load footer

我已经尝试了我所知道的每一种方式,并且已经阅读过,将jquery库移动到页脚,包括以下内容以及以下各种可能的变体:

function add_scripts() {
    wp_deregister_script('jquery');
    wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', false, '1.8.3', true);
    wp_enqueue_script( 'jquery' );
}
add_action('wp_enqueue_scripts', 'add_scripts');

wp_enqueue_script('jquery','/wp-includes/js/jquery/jquery.js','','',true);

我不确定这些Wordpress的版本是什么,但它们在最新版本(3.5 - 3.7)中不起作用。当然,可以从script-loader.php文件中取消注册或完全删除jquery,然后将其硬编码到页脚中,但脚本不起作用。 WordPress以某种方式阻止它实际加载,即使这样做的代码坐在html中。在有人说这个之前,当我试图在页脚中加载jquery时,之后会加载所有其他的javascript,因此它是在库之前加载jquery依赖脚本的问题。此外,许多人会说在页脚中加载核心脚本并不好,从最佳实践的角度来看,这可能是真的,但这是无关紧要的,因为谷歌希望它在页脚中,这才是真正重要的。任何建议将不胜感激。

5 个答案:

答案 0 :(得分:9)

这是有效的(在WordPress 3.8上测试了二十四个主题):

function md_footer_enqueue_scripts() {
    remove_action('wp_head', 'wp_print_scripts');
    remove_action('wp_head', 'wp_print_head_scripts', 9);
    remove_action('wp_head', 'wp_enqueue_scripts', 1);
}
add_action('wp_enqueue_scripts', 'md_footer_enqueue_scripts');`

脚本将在<body>标记结束前放置,CSS文件将保留在文档的<head>中 - 考虑到它们已加入wp_enqueue_style

wp_enqueue_style (Codex Reference)

答案 1 :(得分:1)

试试这个:

if( !is_admin()){
    wp_deregister_script('jquery');
    wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"), false, '1.8.2', true);
    wp_enqueue_script('jquery');
}

答案 2 :(得分:0)

您好我是如何设法包含我的,但我使用cloudflare而不是谷歌您可以轻松改变它。

    add_action('wp_enqueue_scripts', 'my_jquery_enqueue');
function my_jquery_enqueue() {
   wp_deregister_script('jquery');
    wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js" , false, null, true);
   wp_enqueue_script('jquery');
}

如果那不起作用,你试过

在您的情况下,

add_action('wp_footer' , 'add_scripts');而不是add_action('wp_enque_scripts')

答案 3 :(得分:0)

将以下内容放入functions.php文件中 它适用于WordPress 4.1.2

// load jquery in the footer
function ds_enqueue_jquery_in_footer( &$scripts ) {
    if ( ! is_admin() ) {
        $scripts->registered['jquery']->args = 1;
        $scripts->registered['jquery-core']->args = 1;
        $scripts->registered['jquery-migrate']->args = 1;
    }
}
add_action( 'wp_default_scripts', 'ds_enqueue_jquery_in_footer', 11 );
function enqueue_jquery_in_footer() {
    wp_enqueue_script( 'jquery-core' );
    wp_enqueue_script( 'jquery-migrate' );
}
add_action( 'init', 'enqueue_jquery_in_footer' );

答案 4 :(得分:-5)

在文件wp-includes / script-loader.php中,在即将发生的渲染阻塞js脚本上,添加一个值为1的最后一个参数。在我的情况下:

$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.10.2', 1 );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.2.1', 1 );

这与以下文件记录在案:

/**
 * Register all WordPress scripts.
 *
 * Localizes some of them.
 * args order: $scripts->add( 'handle', 'url', 'dependencies', 'query-string', 1 );
 * when last arg === 1 queues the script for the footer