Primero que todo, digamos que con respecto a estas funciones, lo que es válido para los estilos es exactamente válido para los scripts, pero hay algunas excepciones a lo contrario explicadas en la respuesta.
La principal diferencia entre las funciones wp_enqueue_*
y respectivas wp_register_*
, es que la primera agrega secuencias de comandos / estilos a la cola, la segunda prepara las secuencias de comandos / estilos que se agregarán.
Probablemente ya lo sepas, pero hay una segunda diferencia; wp_register_*
se puede usar en todos los ganchos, incluso en un gancho temprano como init
, pero wp_enqueue_*
se debe usar en wp_enqueue_scripts
hook (o admin_enqueue_scripts
para backend) 1 .
El escenario típico de uso de ambas funciones es cuando desea registrar scripts / estilos en el tema init, y luego ponerlos en forma condicional en algunas páginas, por ejemplo
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' );
}
}
De esta manera, la puesta en cola condicional es más legible y menos detallada.
Además, si desea poner en cola uno o más de los estilos / scripts registrados también en el backend, puede usar el manejador registrado en una función que enlaza coxde admin_enqueue_scripts
sin tener que pasar todos los parámetros nuevamente.
Claro, esto es más útil para los scripts, debido a wp_localize_script
que en el escenario anterior se puede llamar una vez, después del registro del script, y luego en la puesta en cola condicional solo encola el script, incluso si se usa más de una vez: esto se mantiene Código más sencillo y SECO.
Cuando registra un estilo / secuencia de comandos e inmediatamente después de ponerlo en cola, es solo una tarea innecesaria, que en realidad se puede evitar por completo:
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_enqueue_style( 'style1' );
No hay ninguna ventaja en poner en cola un estilo (o script) de esta manera, solo usa wp_enqueue_style
con todos los parámetros de wp_enqueue_style
y listo.
La oración anterior también es cierta con respecto al tema de la amistad infantil. Para sobrescribir un estilo en el tema secundario, cuando el padre usa wp_register_style
inmediatamente seguido por wp_enqueue_style
, debe cancelar el registro del estilo y registrarse de nuevo con otra URL. Si el padre solo usa wp_enqueue_style
, en el tema hijo puede usar wp_dequeue_style
y encolar el nuevo estilo, por lo tanto, en el tema secundario necesita 2 líneas de código en ambos casos.
Sin embargo, lo que es muy amigable con el tema infantil es envolver las funciones que ponen en cola y / o registrar estilos y secuencias de comandos en un if ( ! function_exists(
... de esta manera, el tema secundario puede sobrescribir los estilos de los temas principales y las secuencias de comandos en un solo 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' );
}
}
}
Ahora, en el tema secundario, es posible escribir otra función my_register_styles
y / o my_enqueue_styles
y cambiar todos los estilos (si es necesario, por supuesto) sin tener que cancelar el registro de los estilos uno a uno.
1 Aquí hay otra diferencia con los scripts y estilos: wp_enqueue_script
se puede usar en el cuerpo de una página (el uso típico está en un shortcode) y el script se colocará en el pie de página.