WP_Scripts
e WP_Styles
estão atrás das funções wp_enqueue_script
e wp_enqueue_style
. Se você der uma olhada na implementação de classes ( scripts e estilos ) então você verá que WP_Scripts
class não suporta nenhum tipo de scripts condicionais, mas! você pode ver que WP_Styles
faz! O problema é que wp_enqueue_style
não permite que você configure a condição.
Então temos que fazer um pequeno hack:
add_filter( 'wp_enqueue_scripts', 'wpse2345_enqueue_scripts' );
function wpse2345_enqueue_scripts() {
wp_enqueue_style( 'mystyle', 'url/of/my/style.css', array(), '1.0.0' );
global $wp_styles;
$wp_styles->registered['mystyle']->add_data( 'conditional', 'lt IE 9' );
}
Esse truque se torna possível, porque todos os estilos registrados são armazenados no campo registered
da classe WP_Styles
. Cada estilo registrado é um objeto da classe _WP_Dependency
, que permite adicionar dados extras.
Infelizmente, este hack não está funcionando para scripts.
Informações adicionais:
Eu estava realmente passando o código em Essence Theme de Aaron Campbell ontem à noite e notei que ele estava chamando um script e um estilo condicional do navegador.
/**
* @var WP_Scripts
*/
global $wp_scripts;
// Conditionally load this only for IE < 9
$wp_scripts->add_data( 'html5', 'conditional', 'lt IE 9' );
/**
* @var WP_Styles
*/
global $wp_styles;
// Conditionally load this only for IE < 8
$wp_styles->add_data( 'blueprint-ie', 'conditional', 'lt IE 8' );
Há também um ticket e patch , mas ainda não está no core . Obviamente, o script condicional não funcionará sem o patch, mas uma coisa a notar é que você pode usar o método add_data diretamente dentro de sua função que está anexada à ação wp_enqueue_scripts
.