¿Cuándo debo usar wp_register_script() con wp_enqueue_script() vs solo wp_enqueue_script()?
Tengo problemas para entender cuándo es necesario usar wp_register_script(). Actualmente, solo uso algo como:
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
$handle = 'some-handle'; // manejador
$js = 'http://example.com/my.js';
wp_register_script( $handle, $js );
wp_enqueue_script( $handle );
}
He leído mucho (Codex, blogs, etc.), pero no logro entender completamente cuándo debería registrar primero o cuándo debería simplemente encolar. Como ejemplo, noté que TwentyTwelve no registra ningún estilo o script, simplemente los encola.
La wp_register_script() página del Codex literalmente dice:
Una forma segura de registrar javascripts en WordPress para su uso posterior con
wp_enqueue_script().
Esto significa que, si deseas registrar tus scripts pero no cargarlos directamente en tus páginas, puedes registrar los archivos una vez y luego cargarlos cuando los necesites.
Por ejemplo:
Tienes una declaración switch que carga cierta funcionalidad, pero dos de tres casos necesitan un archivo JavaScript particular, y uno no. Puedes encolar el script cada vez, lo que consume más recursos, o simplemente encolarlo cuando lo necesites:
...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
case 'value':
wp_enqueue_script( 'my-handy-javascript' ); // necesita el archivo
...
break;
case 'value2':
wp_enqueue_script( 'my-handy-javascript' ); // necesita el archivo
...
break;
default:
case 'value3': // no necesita el archivo
...
break;
}
No es necesario registrar un script y luego encolarlo, pero puede proporcionar cierta lógica en tu código si registras todos los scripts que necesitas en algún lugar de tu functions.php en lugar de hacerlo por todo tu código.
El Codex también indica lo siguiente:
Usa la acción
wp_enqueue_scriptspara llamar a esta función, oadmin_enqueue_scriptspara llamarla en el lado del administrador.
Esto significa que si deseas encolar tu script en el front-end y en el back-end, puedes registrar el script una vez y luego cargarlo en el front-end con wp_enqueue_script y en el back-end con admin_enqueue_script.
De esta manera, no tendrás el mismo recurso de encolado duplicado en un tema, plugin, widget o lo que sea.
Gracias. Eso aclaró mucho. Entonces, ¿crees que TwentyTwelve no se molesta en registrar primero ya que seguro los va a cargar?
akTed
Definitivamente podría ser una posibilidad. No sé cómo está construido el tema Twenty Twelve ya que nunca lo uso, pero seguramente tendrán sus razones para usar enqueue en lugar de register.
Mike Madern
Desde mi punto de vista, la función register no es técnicamente necesaria en absoluto, solo existe por conveniencia: ahorra trabajo de escritura. Si esto es cierto, entonces debería estar explícitamente declarado en la documentación.
Jan-Philip Gehrcke
En ese sentido, no estoy de acuerdo con "Puedes encolar el script cada vez, lo que consume más recursos, o simplemente encolarlo cuando lo necesites". En tu código de ejemplo, podrías eliminar la llamada a register y en su lugar tener múltiples llamadas equivalentes completas (con el argumento $src) a wp_enqueue_style(). Esto solo requeriría más esfuerzo de escritura, pero no resultaría en mayores requisitos de recursos. ¿Correcto?
Jan-Philip Gehrcke
Entonces, esto significa que para cargar un script o archivo css, es necesario usar las funciones wp_enqueue_scripts o wp_enqueue_style, con o sin la función register?
Lai32290
Un punto que todas las explicaciones han omitido hasta ahora es que puedes usar wp_register_script() simplemente para registrar un script para que pueda usarse como dependencia de otros scripts y solo cargarse con ellos, sin ser encolado directamente nunca.
JHoffmann
Aunque esto lo explica bien, recomendaría leer también esta respuesta.
lowtechsun
Lo ridículo es que tienes que registrar el script en, por ejemplo, wp_enqueue_scripts, lo cual no tiene sentido si quieres ser ordenado y registrar todo tu material para que esté disponible más adelante (como dependencia). Noooo... Tienes que usar uno o más de los mismos 3 hooks (uno para el front office, otro para el back office y otro para la pantalla de login). Así que terminarás con wp_register_script() seguido del uso de ese script registrado de todos modos. No tan elegante ahora, ¿verdad? Lo cual, en mi opinión, anula el propósito de tener 2 funciones separadas.
XedinUnknown
Para tu información, admin_enqueue_script no parece ser una función/hook de WordPress. Pero admin_enqueue_scripts es un hook de WordPress que puede cargar archivos JavaScript o CSS en cola - ver:
https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/
risingPhoenix1979
He revisado algunos artículos y llegado a la siguiente conclusión. Creo que ayuda.
- Registrar cualquier script usando
wp_register_script()es solo registrarlo; no cargarlo. El script registrado no se cargará hasta que se encole usandowp_enqueue_script(). - No necesitamos registrar y encolar cada uno de los scripts simultáneamente. Solo debemos encolarlos. Registrar no es obligatorio ya que la función
wp_enqueue_script()registra automáticamente el script. Pero sí necesitamos registrar cuando estemos en cualquiera de las siguientes situaciones:
a. Supongamos que necesitamos un script que se cargue en más de un lugar, como una vez en el front-end y otra en el back-end (página de administración). Podemos registrar el script solo una vez. Y luego encolarlo en el front-end y back-end individualmente. Mira, encolar significa cargar. Registrar no significa cargar. Si no lo registramos, se registrará automáticamente tantas veces como lo encolemos. Por otro lado, si lo registramos una vez, se registrará una sola vez, sin importar cuántas veces lo encolemos.
b. Si queremos usar un script como dependencia de otros scripts, entonces no necesitamos encolarlo con
wp_enqueue_script(). Solo debemos registrarlo conwp_register_script(). Y se encolará automáticamente cuando usemos su nombre de handle como dependencia de otros scripts encolados conwp_enqueue_script().c. Si queremos que el script se cargue cuando sea necesario en lugar de cargarse de una vez, podemos simplemente registrarlo para usarlo más tarde. El caso de uso se mostró anteriormente.
N.B. Según mi entendimiento, la misma conclusión puede aplicarse a las hojas de estilo CSS. Es decir, podemos usar wp_register_style() y wp_enqueue_style() de la misma manera.
Ten en cuenta que la conclusión aquí refleja mi propia deducción. Si estoy equivocado, por favor corrígeme. Y es posible que hayas llegado a una conclusión diferente y mucho mejor. Si es así, por favor háznoslo saber. ¿Quién sabe? Tal vez la tuya sea la mejor. Como dice el refrán: "Cuántas creencias, tantos caminos hacia la salvación." :)
https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html
Tu explicación es la mejor que he leído. Ahora entiendo por qué es importante registrar los scripts. ¡Gracias!
Eje
En mi opinión, la principal ventaja de usar wp_register_script antes de wp_enqueue_scripts se ilustra en el siguiente párrafo del Codex:
Los scripts que han sido pre-registrados usando wp_register_script() no necesitan ser encolados manualmente usando wp_enqueue_script() si están listados como una dependencia de otro script que está encolado. WordPress incluirá automáticamente el script registrado antes de incluir el script encolado que lista el handle del script registrado como dependencia.
Si crees que no necesitas esto (por ejemplo, porque estás 100% seguro de que tu script no estará involucrado en ninguna dependencia) probablemente puedas ir directamente con wp_enqueue_scripts, sin un wp_register_script preliminar.
Creo que el último párrafo (sobre no necesitar registrar si "estás 100% seguro de que tu script no estará involucrado en ninguna dependencia") está equivocado. Creo que lo correcto es que no necesitas registrar si estás seguro de que vas a cargar tu script de todos modos. - el encolamiento implícitamente también registra tu script para que otros scripts puedan depender de él, incluso si solo lo encolaste.
epeleg