¿Cómo desenqueuear correctamente scripts y estilos en un tema hijo?

31 may 2015, 12:17:29
Vistas: 59.3K
Votos: 23

Hice un tema padre y un tema hijo en uno de mis proyectos. Encolé CSS y JavaScripts en mi tema padre de la siguiente manera:

function project_necessary_scripts() {
    //Hojas de estilo
    wp_register_style( 'bootstrap-css', get_template_directory_uri() .'/css/bootstrap.min.css' );
    wp_register_style( 'bootstrap-map', get_template_directory_uri() .'/css/bootstrap.css.map' );
    wp_register_style( 'project-css', get_stylesheet_uri() );

    wp_enqueue_style( 'bootstrap-css' );
    wp_enqueue_style( 'bootstrap-map' );
    wp_enqueue_style( 'project-css' );

    //JavaScripts
    wp_register_script( 'modernizr-js', get_template_directory_uri() .'/js/modernizr-2.8.3.min.js', array(), '2.8.3' );
    wp_register_script( 'project-js', get_template_directory_uri() .'/js/project.min.js', array('jquery'), '20150401', true );

    wp_enqueue_script( 'modernizr-js' );
    wp_enqueue_script( 'project-js' );
}
add_action( 'wp_enqueue_scripts', 'project_necessary_scripts' );

Ahora, en mi tema hijo quiero desenqueuear algunas hojas de estilo y javascripts. Así que usé el siguiente código:

function project_dequeue_unnecessary_scripts() {
    wp_dequeue_style( 'bootstrap-map' );
    wp_dequeue_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

Pero en realidad el archivo bootstrap.css.map todavía se está encolando, pero modernizr-js y project-js no se están cargando, así que está funcionando parcialmente. ¿Cómo puedo resolver esto?

Incluso probé con prioridades en la acción:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
0
Todas las respuestas a la pregunta 3
4
47

Estás muy cerca de la solución, porque vas por el camino correcto. Solo falta un pequeño ajuste:

Existen dos hooks de acción para esto:

  1. wp_print_scripts, y
  2. wp_print_styles

La forma de hacerlo es engancharlos de manera diferente:

// Eliminar estilos de la cola
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

// Eliminar scripts de la cola
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr-js' );
        wp_deregister_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
        wp_deregister_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

La forma correcta es desregistrarlos además de sacarlos de la cola. Primero se sacan de la cola y luego se desregistran correspondientemente.

31 may 2015 12:17:29
Comentarios

según la documentación: Desde WordPress 3.3, wp_print_scripts no debería usarse para encolar estilos o scripts. Usa wp_enqueue_scripts en su lugar.

rokpoto.com rokpoto.com
6 feb 2018 00:12:43

@user1264304 Aquí no estamos encolando cosas, estamos desencolando cosas.

Mayeenul Islam Mayeenul Islam
6 feb 2018 06:31:17

sí, pero según este enlace, deberías usar add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')

rokpoto.com rokpoto.com
6 feb 2018 22:42:24

La pregunta y la respuesta aceptada (esta) son de la misma persona. Sin embargo, la forma correcta es usar la acción wp_enqueue_scripts. La respuesta de @morshed-alam-sumon es el método apropiado. La única razón por la que engancharse a wp_print_scripts funcionaría es porque se activa tarde. Técnicamente, podrías usar cualquier acción que se haya activado después de que el original se encolara con wp_enqueue_scripts, pero ese no es el enfoque correcto. La razón para hacerlo de la manera correcta es que cualquier otro método que funcione ahora no garantiza que seguirá funcionando en el futuro debido a cambios en el núcleo.

butlerblog butlerblog
26 mar 2025 13:55:31
0

Esta no es la forma correcta. WordPress dijo que no se usen tanto wp_print_scripts como wp_print_styles desde WordPress 3.3.

Ya sea que estés encolando o desencolando, la forma adecuada es:

function project_dequeue_unnecessary_scripts() {
    wp_dequeue_style( 'bootstrap-map' );
    wp_dequeue_script( 'modernizr-js' );
}
add_action( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts', 100 );

No olvides usar la prioridad. Sin prioridad, no funcionará.

10 abr 2021 22:58:52
1

Para Desencolar Scripts, no agregues el último "-js" o "-css" en la parte del ID. Estaba usando WordPress 5.8. Funciona para mí.

CÓDIGO ANTERIOR:

//Desencolar JavaScripts
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr-js' );
        wp_deregister_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
        wp_deregister_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

CÓDIGO FUNCIONAL:

//Desencolar JavaScripts
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr' );
        wp_deregister_script( 'modernizr' );
    wp_dequeue_script( 'project' );
        wp_deregister_script( 'project' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

Asegúrate de revisar el código fuente de la página para ver el ID del script primero y eliminar la parte "-js". Elimina solo el último -js.

Por ejemplo: Si el ID de tu Script es project-js-js entonces elimina solo el último -js y usa project-js en la acción de desencolar. Lo mismo para CSS, elimina solo la última parte "-css".

24 oct 2021 01:14:00
Comentarios

Esto fue clave para mí, llevaba horas luchando con esto. Gracias.

cdsaenz cdsaenz
20 feb 2022 17:20:30