Antes de tudo, digamos que, com relação a essas funções, o que é válido para estilos é exatamente válido para scripts, mas há algumas exceções ao contrário explicadas na resposta.
A principal diferença entre wp_enqueue_*
e respectivas funções wp_register_*
, é que a primeira adiciona scripts / estilos à fila, a segunda prepara scripts / estilos a serem adicionados.
Você provavelmente já sabe disso, mas há uma segunda diferença; wp_register_*
pode ser usado em cada gancho, mesmo em um gancho inicial como init
, mas wp_enqueue_*
deve ser usado em wp_enqueue_scripts
hook (ou admin_enqueue_scripts
para backend) 1 .
O cenário típico de usar ambas as funções é quando você deseja registrar scripts / estilos no tema init e, em seguida, enfileirá-los condicionalmente em algumas páginas, por exemplo,
add_action('init', 'my_register_styles');
function my_register_styles() {
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );
function my_enqueue_styles() {
if ( is_front_page() ) {
wp_enqueue_style( 'style3' );
} elseif ( is_page_template( 'special.php' ) ) {
wp_enqueue_style( 'style1' );
wp_enqueue_style( 'style2' );
} else {
wp_enqueue_style( 'style1' );
}
}
Desta forma, o enfileiramento condicional é mais legível e menos detalhado.
Além disso, se você quiser enfileirar um ou mais dos estilos / scripts registrados também no backend, você pode usar o identificador registrado em uma função que engancha admin_enqueue_scripts
sem ter que passar todos os parâmetros novamente.
Claro que isso é mais útil para scripts, porque wp_localize_script
no cenário anterior pode ser chamado uma vez, após o registro do script e, em seguida, no enfileiramento condicional apenas enfileirar o script, mesmo que seja usado mais de uma vez: código mais simples e DRY.
Quando você registra um script / estilo e imediatamente depois de enfileirá-lo, é apenas uma tarefa desnecessária, que na verdade pode ser completamente evitada:
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_enqueue_style( 'style1' );
Não há nenhuma vantagem em enfileirar um estilo (ou script), assim, use wp_enqueue_style
com todos os parâmetros de wp_enqueue_style
e pronto.
A sentença anterior também é verdadeira em relação à amizade do tema infantil. Para sobrescrever um estilo no tema filho, quando o pai estiver usando wp_register_style
imediatamente seguido por wp_enqueue_style
, será necessário cancelar o registro do estilo e registrar novamente com outro URL. Se o pai estiver usando apenas wp_enqueue_style
, no tema filho, você pode usar wp_dequeue_style
e enfileirar o novo estilo, então, no tema filho, você precisa de duas linhas de código nos dois casos.
No entanto, o que é muito amigo do tema é agrupar as funções que enfileiram e / ou registram estilos e scripts em um if ( ! function_exists(
... dessa forma, o tema filho pode sobrescrever estilos e scripts de tema pai em um só lugar:
if ( ! function_exists( 'my_register_styles' ) ) {
function my_register_styles() {
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
}
}
if ( ! function_exists( 'my_enqueue_styles ') ) {
function my_enqueue_styles() {
if ( is_front_page() ) {
wp_enqueue_style( 'style3' );
} elseif ( is_page_template( 'special.php' ) ) {
wp_enqueue_style( 'style1' );
wp_enqueue_style( 'style2' );
} else {
wp_enqueue_style( 'style1' );
}
}
}
Agora, no tema filho, é possível escrever outra função my_register_styles
e / ou my_enqueue_styles
e alterar todos os estilos (se necessário, é claro) sem ter que cancelar o registro / desenfileiramento de estilos, um por um.
1 Aqui está outra diferença de scripts e estilos: wp_enqueue_script
pode ser usado no corpo de uma página (o uso típico está em um shortcode) e o script será colocado no rodapé. / p>