¿Cuándo debo usar wp_register_script() con wp_enqueue_script() vs solo wp_enqueue_script()?

21 ene 2013, 16:36:50
Vistas: 49.3K
Votos: 70

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.

0
Todas las respuestas a la pregunta 3
9
68

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_scripts para llamar a esta función, o admin_enqueue_scripts para 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.

21 ene 2013 16:47:19
Comentarios

Gracias. Eso aclaró mucho. Entonces, ¿crees que TwentyTwelve no se molesta en registrar primero ya que seguro los va a cargar?

akTed akTed
21 ene 2013 17:09:12

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 Mike Madern
21 ene 2013 17:14:33

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 Jan-Philip Gehrcke
16 jun 2015 23:41:22

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 Jan-Philip Gehrcke
16 jun 2015 23:43:25

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 Lai32290
20 oct 2015 04:12:18

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 JHoffmann
5 nov 2016 18:57:31

Aunque esto lo explica bien, recomendaría leer también esta respuesta.

lowtechsun lowtechsun
15 nov 2016 20:15:32

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 XedinUnknown
28 ago 2018 18:46:36

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 risingPhoenix1979
6 abr 2022 20:02:05
Mostrar los 4 comentarios restantes
4
12

He revisado algunos artículos y llegado a la siguiente conclusión. Creo que ayuda.

  1. Registrar cualquier script usando wp_register_script() es solo registrarlo; no cargarlo. El script registrado no se cargará hasta que se encole usando wp_enqueue_script().
  2. 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.
  3. 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 con wp_register_script(). Y se encolará automáticamente cuando usemos su nombre de handle como dependencia de otros scripts encolados con wp_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

1 ene 2019 15:06:46
Comentarios

Tu explicación es la mejor que he leído. Ahora entiendo por qué es importante registrar los scripts. ¡Gracias!

Eje Eje
30 oct 2019 23:42:19

Muchas gracias @Jee

Mohammad Shohel Rana Mohammad Shohel Rana
4 nov 2019 05:29:39

Esta es la respuesta más útil que he leído nunca. Gracias.

Thiago Santos Thiago Santos
13 feb 2023 22:49:20

Muchas gracias @ThiagoSantos

Mohammad Shohel Rana Mohammad Shohel Rana
18 mar 2023 02:40:45
1
11

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.

1 jun 2017 22:43:01
Comentarios

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 epeleg
18 sept 2022 12:30:23