¿Cómo quitar correctamente secuencias de comandos y estilos en el tema secundario?

11

Hice un tema principal y un tema secundario en uno de mis proyectos. Puse en cola CSS y JavaScripts en mi tema principal como a continuación:

function project_necessary_scripts() {
    //Stylesheets
    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 Child , quiero eliminar algunas hojas de estilo y javascripts. Entonces 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 bootstrap.css.maparchivo sigue en cola, pero modernizr-js project-js no se carga, por lo que funciona parcialmente. ¿Cómo puedo resolver eso?

Incluso probé las prioridades de acción:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
Mayeenul Islam
fuente

Respuestas:

24

Estás más cerca de la solución, porque estás en el camino correcto. Solo para modificar un poco:

Hay dos ganchos de acción de este tipo:

  1. wp_print_scriptsy
  2. wp_print_styles

Entonces, la forma en que puedes hacerlo es: engancharlos de manera diferente:

//Dequeue Styles
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

//Dequeue 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' );

Y la forma correcta es anular el registro de ellos además de retirarlos. Así que primero retíralos y luego anótalos como corresponde.

Mayeenul Islam
fuente
de acuerdo con los documentos : desde WordPress 3.3, wp_print_scripts no debe usarse para poner en cola estilos o scripts. Utilice wp_enqueue_scripts en su lugar.
rok
@ user1264304 No estamos poniendo en cola las cosas aquí, estamos quitando las cosas.
Mayeenul Islam
1
sí, pero de acuerdo con el enlace , uno debe usaradd_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok