Anulando el javascript del tema principal del tema secundario

2 minutos de lectura

Mi tema principal tiene un script en \includes\js\custom.js, y estoy tratando de anularlo desde mi tema secundario. Puedo ver en mi tema principal que está en cola usando este código: (He recortado algunas líneas no relevantes de llamadas wp_enqueue_script()).

function my_deregister_scripts() {
        wp_deregister_script( 'jquery' );
        wp_enqueue_script('jquery', get_template_directory_uri().'/includes/js/jquery.min.js', false, '1.6.4');
        wp_enqueue_script('jquery-custom', get_template_directory_uri().'/includes/js/custom.js', false, '1.0');
        if ( is_singular() && get_option('thread_comments') ) wp_enqueue_script( 'comment-reply' );
}

Al principio, pensé que simplemente podría agregar algo de código en mi propio archivo functions.php como este:

function custom_script_fix()
{
    wp_dequeue_script( 'jquery-custom' );
    wp_enqueue_script( 'child-jquery-custom', get_stylesheet_directory_uri() .'/includes/js/custom.js', false, '1.0');
}
add_action( 'wp_enqueue_scripts', 'custom_script_fix' );

pero luego leí en el códice que hoy en día, el child functions.php se ejecuta inmediatamente antes que el padre functions.php. Esto significa que estoy sacando de la cola algo que seguramente se volverá a poner en cola en las funciones principales.php. Esto da como resultado que mi secuencia de comandos se cargue primero, seguida de la secuencia de comandos principal:

Como puede ver, se carga el script secundario, luego el principal.

Entonces, ¿cómo haría esto sin modificar el tema principal de ninguna manera?

avatar de usuario
chris j allen

Simplemente registrando el script y usando el mismo identificador que se usa en el tema principal, tiene prioridad. Por lo tanto, cuando el tema principal pone en cola su propia versión, el identificador ya está asignado y, en su lugar, pone en cola la anulación.

function custom_script_fix()
{
    // use same handle as parent theme to override ('jquery-custom')
    wp_register_script('jquery-custom', get_stylesheet_directory_uri() .'/includes/js/custom.js', false, '1.0');
}

add_action( 'wp_enqueue_scripts', 'custom_script_fix' );

La descripción en wp_enqueue_script() especifica que no reemplazará la versión registrada. Es posible que deba establecer un valor más bajo $priority en add_action() para asegurarse de que su secuencia de comandos de anulación se registre primero.

  • encontre eso wp_register_script() solo es suficiente, como más tarde llama a eso o wp_register_script() no reemplazará la anulación. También significa que cualquier secuencia de comandos anulada de esta manera solo se incluirá si se hubiera incluido el original.

    – Walf

    3 de octubre de 2019 a las 0:53

  • La solución @Walf también fue suficiente para mí

    – Stender

    9 de junio de 2020 a las 12:07

¿Ha sido útil esta solución?