¿Cómo desenqueuear correctamente scripts y estilos en un tema hijo?
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 );

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:
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.

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.

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

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

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.

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á.

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".
