¿Cómo reemplazar los archivos JavaScript en el tema secundario?

34

Estoy cargando algunos archivos JavaScript en el tema principal. La ruta en el tema principal es:

scripts > custom.js

En el tema secundario, estoy creando la misma ruta ( scripts > custom.js ) y cambiando parte de jQuery dentro del archivo custom.js .

El problema es que los cambios no se están aplicando. ¿Es esta la forma incorrecta de realizar cambios en estos archivos en el tema secundario?

    
pregunta Chris Molitor 25.08.2011 - 00:14

3 respuestas

42

Los temas secundarios solo reemplazan los archivos php (como header.php) que se incluyen con funciones como get_template_part o get_header, etc.

La forma correcta de agregar scripts a WordPress es con wp_enqueue_script . Si su tema principal usa esto, puede anular los archivos JS usando wp_dequeue_script y enarbolando el suyo propio.

Me gusta ...

<?php
// hook in late to make sure the parent theme's registration 
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
    wp_dequeue_script('parent_theme_script_handle');
    wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}

Si el tema principal no usa wp_enqueue_script, probablemente se enganche en wp_head (o wp_footer) para hacer eco de los scripts allí. Así que usarías remove_action para deshacerte de esas funciones haciendo eco de los scripts, y luego poner en cola tu propio script.

Si la secuencia de comandos está codificada en el archivo de plantilla, solo tendrá que reemplazar esa plantilla en el tema de su hijo sin la etiqueta de secuencia de comandos.

Si utilizaron las llamadas wp_enqueue_script que utilizan get_stylesheet_directory_uri , entonces no debería tener que hacer nada. Como esto no está sucediendo, solo tendrás que buscar y ver lo que hizo el autor del tema.

    
respondido por el chrisguitarguy 25.08.2011 - 00:27
1

En algunos casos, es importante priorizar las llamadas a add_action y wp_enqueue_script de esta forma:

add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
    wp_dequeue_script('storefront-navigation');
    wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}

En este caso, wp_enqueue_scripts fue llamado por el padre con una prioridad de 20120206 (la fecha), por lo que esta acción se agrega con una prioridad apenas mayor para que se elimine de inmediato. Luego, la declaración de puesta en cola que sigue a continuación se en realidad se prioriza después de eso para asegurar que se cargue después de que la anterior fue eliminada de la cola. La verdad, en este caso, también es importante porque eso especifica que se debe poner en cola en el pie de página, que es donde se colocó por primera vez la secuencia de comandos principal.

Además, no puedo explicarlo por completo, pero me doy cuenta de que si tiene cuidado de quitar el guión inicial inmediatamente después de su puesta en cola, parece que en primer lugar puede evitar que se cargue.

    
respondido por el damiankaelgreen 11.11.2015 - 02:24
1

llame a wp_deregister_script antes de registrar su propia versión

    
respondido por el Mohamed Abo Badawy 25.12.2016 - 16:17

Lea otras preguntas en las etiquetas