Enfileirar núcleo jQuery no rodapé?

15

Eu tenho isso no meu arquivo functions.php e não consigo fazer o jQuery carregar no rodapé. No entanto, o arquivo includes é carregado no rodapé. O que mais eu preciso fazer?

function starter_scripts() {
    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );

    wp_enqueue_script( 'jquery', '', '', '', true );

    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );
    
por Desi 30.12.2014 / 20:44

4 respostas

18

Para fazer isso, primeiro você terá que cancelar o registro do seu script jQuery e, em seguida, registrar-se novamente. Se você usa o jQuery vem com o WordPress, então segue a função que você está procurando.

function starter_scripts() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', includes_url( '/js/jquery/jquery.js' ), false, NULL, true );
    wp_enqueue_script( 'jquery' );

    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );

Se você usar a versão hospedada do jQuery no Google CDN, informe-nos que modificarei esse código para o URL do Google CDN.

    
por Robert hue 30.12.2014 / 21:23
36

Aqui está outra opção que evita o cancelamento do registro e o registro:

/**
 * Move jQuery to the footer. 
 */
function wpse_173601_enqueue_scripts() {
    wp_scripts()->add_data( 'jquery', 'group', 1 );
    wp_scripts()->add_data( 'jquery-core', 'group', 1 );
    wp_scripts()->add_data( 'jquery-migrate', 'group', 1 );
}
add_action( 'wp_enqueue_scripts', 'wpse_173601_enqueue_scripts' );

Esta solução imita o núcleo do WordPress definindo o group para 1 , que é como o WordPress determina se um script deve estar no rodapé ou não (não estou ciente do raciocínio para 1 , como @jgraup observou nos comentários parece um pouco arbitrário).

    
por Matthew Boynes 07.05.2016 / 16:11
16

Uma solução melhor:

add_action( 'wp_default_scripts', 'move_jquery_into_footer' );

function move_jquery_into_footer( $wp_scripts ) {

    if( is_admin() ) {
        return;
    }

    $wp_scripts->add_data( 'jquery', 'group', 1 );
    $wp_scripts->add_data( 'jquery-core', 'group', 1 );
    $wp_scripts->add_data( 'jquery-migrate', 'group', 1 );
}

Eu gosto disso porque muda isso no centro.

Sobre não fazer isso para o administrador:

Se os plug-ins adicionarem jquery inline ao wp_head, ele falhará quando a jquery não estiver carregada nesse ponto, então sugiro que você evite até que você tenha milhões editando seu site e tente otimizar seu desempenho. Isso também é verdade para o frontend, então você deve ficar atento a temas ou plugins mal codificados que assumem o jquery na cabeça usando o código in-line do jQuery.

Sobre isso não está funcionando:

Você precisa estar ciente de que, se qualquer outro script for carregado na cabeça que tenha jQuery em suas dependências, ele também fará com que o jQuery seja carregado na cabeça imediatamente antes de si mesmo. E isso é bom e esperado, a razão pela qual o sistema wp_enqueue existe.

    
por NextGenThemes 26.09.2016 / 22:50
-3

Ei, só mude seu código para curtir isso

function starter_scripts() {
        wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
        wp_enqueue_script('jquery');
        wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', array( 'jquery' ) );
    }
    add_action( 'wp_enqueue_scripts', 'starter_scripts' );

eu acho que funciona bem

adicione estas linhas em seu arquivo functions.php

remove_action('wp_head', 'wp_enqueue_scripts', 1);
add_action('wp_footer', 'wp_enqueue_scripts', 5);

adicione script no rodapé

    
por Amit Mishra 30.12.2014 / 21:05