En WordPress es muy fácil no seguir las buenas prácticas de programación. Dado que hay varias rutas para llegar al mismo destino, algunos programadores toman la ruta que no deben. A pesar de esto, el código que crean probablemente funcione sin problemas, sin embargo no es lo ideal.

Una de las situaciones en las que esto pasa con muchas frecuencia es en la carga de scripts y hojas de estilo en nuestros temas.

La mala manera de hacerlo

Como seguro (espero) ya saben, en el header.php se coloca la función wp_head() y en el footer.php colocamos wp_footer()
Estas funciones sirven para que WordPress cargue todos los scripts que necesita. Sin embargo, algunos programadores colocan los scripts

<script src="<?php echo get_template_directory_uri(); ?>/js/algunjs.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/otrojs.js"></script>

Ya sea en el header o en el footer.

Por qué es mala práctica hacer esto

WordPress tiene una “cola” de carga de scripts y los carga en el orden que sean más convenientes. Por ejemplo, si necesitas underscore, WordPress trae underscore. Instalarlo por tu lado es perder recursos. Todos los plugins que usamos cargan los scripts usando la cola de WordPress, por lo que si los cargamos sin seguir el orden podemos romper algo.

La manera correcta

WordPress tiene la siguiente función que nos permite registrar nuevos scripts

wp_register_script( $handle, $src, $deps, $ver, $in_footer );
  • $handle Es un nombre que le damos al script
  • $src Es nuestro script, debemos colocar aquí la ruta a nuestro script
  • $deps Éstas son las dependencias, por ejemplo, si nuestro código necesita jquery para correr, lo colocamos como dependencia y WordPress carga jQuery dentro del proyecto.
  • $ver La versión del script que estamos usando.
  • $in_footer Como indica el nombre, este parámetro es para especificar si queremos cargar el script en el footer o en el header. Por defecto está en true, así que si queremos colocar un script en el header (cómo modernizr) debemos colocarla en false

Después debemos usar wp_enqueue_script para ponerlos en la cola.

Si usamos el código anterior en nuestro código original, queda de la siguiente manera

// Definimos la función
function ss_scripts() {
// El primer paso es usar wp_register_script para registrar el script que queremos cargar. Fíjense que aquí sí usamos *get_template_directory_uri()*
wp_register_script( 'primer-script', get_template_directory_uri() . '/js/algunjs.js', array( 'jquery'), '1.0.0', true );
wp_register_script( 'segundo-script', get_template_directory_uri() . '/js/otrojs.js', array( 'jquery'), '1.0.0', false );
// Una vez que registramos el script debemos colocarlo en la cola de WordPress
wp_enqueue_script( 'app-script' );
wp_enqueue_script( 'segundo-script' );
}

// Agregamos la función a la lista de cargas de WordPress.
add_action( 'wp_enqueue_scripts', 'ss_scripts' );

Aquí vemos que el primer script va al footer y el segundo va al header. Se pueden colocar tantos scripts se quieran, siempre y cuando se registren primero y luego se coloquen en la cola.