Comment retirer correctement les scripts et les styles du thème enfant?

11

J'ai créé un thème parent et un thème enfant dans l'un de mes projets. J'ai mis en file d'attente CSS et JavaScripts dans mon thème parent comme ci-dessous:

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

Maintenant, dans mon thème Enfant, je souhaite retirer de la file d'attente certaines feuilles de style et javascripts. J'ai donc utilisé le code suivant:

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

Mais en fait, le bootstrap.css.mapfichier est toujours en file d'attente, mais le projet modernizr-js-js ne se charge pas, il fonctionne donc partiellement. Comment puis-je résoudre cela?

J'ai même essayé des priorités d'action:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
Mayeenul Islam
la source

Réponses:

24

Vous êtes très proche de la solution, car vous êtes sur la bonne voie. Juste pour peaufiner un peu:

Il existe deux de ces crochets d'action:

  1. wp_print_scripts, et
  2. wp_print_styles

Donc, la façon dont vous pouvez le faire, c'est: les accrocher différemment:

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

Et la bonne façon est de les radier à côté de la mise en file d'attente. Alors, retirez-les d'abord de la file d'attente, puis annulez leur enregistrement en conséquence.

Mayeenul Islam
la source
selon les documents : depuis WordPress 3.3, wp_print_scripts ne doit pas être utilisé pour mettre en file d'attente des styles ou des scripts. Utilisez plutôt wp_enqueue_scripts.
rok
@ user1264304 Nous ne mettons pas les choses en file d'attente ici, nous mettons les choses en file d'attente.
Mayeenul Islam
1
oui, mais selon le lien , on devrait utiliseradd_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok