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 );
}
Por que é melhor que a resposta aceita IMO
- Altera-o no centro, não em um estágio posterior, onde outras coisas já possam ter mexido com ele.
- A string de versão mantida no lugar e não removida!
- Ele não cancela o registro e registra novamente um script, mas apenas define o valor do grupo que é essencialmente o mesmo como se o script fosse registrado
$footer = true
.
Sobre não fazer isso com o administrador
Se os plug-ins adicionarem o jquery embutido ao wp_head, ele falhará quando o jquery não for carregado nesse momento. Portanto, sugiro que você evite isso até ter milhões editando o site e tentando otimizar o desempenho do administrador. Isso também é válido para o front-end, portanto, você deve ficar atento a temas ou plug-ins com códigos incorretos que assumem jquery na cabeça usando o código jQuery embutido. O WP e os plugins registram outros scripts na cabeça do administrador com o jquery in deps, para que não funcione de qualquer maneira, eu acho.
Sobre isso não está funcionando
Você precisa estar ciente de que, se qualquer outro script for carregado no cabeçalho que possui o jQuery em suas dependências, ele também fará o jQuery carregar no cabeçote antes de si. E isso é bom e esperado, o motivo pelo qual o sistema wp_enqueue existe. Isso significa que você aprenderá em breve se usar alguns plugins que um deles exigirá causar jquery na cabeça. É o padrão para scripts enfileirados, infelizmente.
Solução Radical
Eu acho que ele irá travar qualquer JS embutido que assume jquery, mas isso deve ser raro. Isso forçará todos os scripts para o rodapé, independentemente de como eles estão na fila.
add_action( 'wp_enqueue_scripts', 'js_to_footer' );
function js_to_footer() {
remove_action( 'wp_head', 'wp_print_scripts' );
remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
}
defer
de suas tags de script em vez disso: matthewhorne.me/defer-async-wordpress-scripts