Para estender a sugestão de @gmazzap sobre não usar globais quando você pode usar wp_scripts()
, há um atalho para wp_scripts()
para adicionar comentários condicionais chamados wp_script_add_data
e igualmente wp_style_add_data
para estilos condicionais.
Assim, a maneira correta de usar condicionais do Wordpress 4.2 é assim:
/**
* IE enqueue HTML5shiv with conditionals
* @link http://tiny.cc/html5shiv
*/
function wpse_213701_enqueue_html5shiv() {
wp_enqueue_script( 'html5shiv',
'https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js',
array(),
false,
false
);
wp_script_add_data( 'html5shiv', 'conditional', 'lt IE 9' );
}
add_action('wp_enqueue_scripts', 'wpse_213701_enqueue_html5shiv');
No entanto, o exemplo acima está usando HTML5shiv , que é uma situação única. Uma vez que tem que ser carregado na cabeça você poderia fazer algo como este próximo exemplo se você está preocupado com um plugin como Roots Soil removendo todos os scripts da cabeça.
O mais provável é que você não encontre uma situação como essa. É uma coisa muito instável, já que muitos scripts precisam ser carregados na cabeça. Colocar scripts no rodapé deve ser feito definindo a variável $in_footer
como true ao enfileirar scripts. Então, se você usa raízes ou qualquer plugin de cache, não pense em tudo que está funcionando exatamente da maneira que você quer.
Aqui está um exemplo feio do que você pode fazer:
add_action( 'wp_head', 'wpse_213701_check_html5shiv', 1 );
function wpse_213701_check_html5shiv() {
remove_action( 'wp_head', 'genesis_html5_ie_fix' );
if ( !has_filter( 'wp_head', 'wp_enqueue_scripts' ) && !wp_script_is( 'html5shiv', 'done' ) ) {
add_action('wp_head', 'wpse_213701_echo_html5shiv');
wp_dequeue_script('html5shiv');
}
}
function wpse_213701_echo_html5shiv() {
echo '<!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><![endif]-->'."\n";
}
Isso é um exagero e ainda não é uma garantia de que funcionará. Nos últimos 4 anos, html5shiv assumiu vários nomes que fizeram com que ele fosse registrado / enfileirado com vários identificadores diferentes (html5, html5shiv, html5shim, themename-html5shiv, html5-ie-fix e html5 -polyfill só para citar alguns). Além disso, muitas vezes é empacotado com modernizr . Com isso em mente, se você acha que o exemplo acima é ridículo, você também está adicionando o script a wp_head
em seu tema filho, já que um identificador de plugins html5shiv provavelmente nomeará outra coisa .
Atualizar (Movendo scripts para o rodapé com essa abordagem):
Isso provocou algumas ações na página Roots / Soil do Github. Aqui está provavelmente a melhor maneira de fazer isso (como sugerido por @grappler ) e ainda mover scripts para o rodapé. Uma abordagem semelhante foi publicada em @ kaiser
unserkaiser.com/blog/2013/10/08/how-to-move-wordpress-core-javascript-to-the-footer/">blogfunction grappler_move_js_to_footer()
$scripts = wp_scripts();
foreach( $scripts->registered as $script ) {
if ( 'html5' == $script->handle ) {
wp_script_add_data( $script->handle, 'group', 0 );
} else {
wp_script_add_data( $script->handle, 'group', 1 );
}
}
}
add_action( 'wp_enqueue_scripts', 'grappler_move_js_to_footer', 99 );
Quanto ao que Mark Kaplan sugeriu e que toscho mencionado aqui , > você não deveria estar usando o método $ is_IE da opção 2 . Aparentemente, se o cabeçalho HTTP Vary: User-Agent não for enviado, você enviará a saída errada para os usuários por trás de um cache, fazendo com que ele seja interrompido para esses usuários. No que diz respeito à detecção do lado do navegador aqui está uma longa lista de exemplos sobre como isso pode ser feito. Mesmo a detecção do lado do cliente tem suas armadilhas.
No final das contas, talvez a melhor resposta seja não usar nenhum desses métodos e esquecer os navegadores herdados, já que A Microsoft deixou cair o suporte para eles a partir de 12 de janeiro .