Jak poprawnie usunąć kolejkę skryptów i stylów w motywie potomnym?

11

W jednym z moich projektów stworzyłem motyw nadrzędny i motyw podrzędny. Umieściłem w kolejce CSS i JavaScript w moim motywie nadrzędnym, jak poniżej:

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

Teraz w motywie Dziecko chcę usunąć kolejność arkuszy stylów i skryptów javascript. Więc użyłem następującego kodu:

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

Ale tak naprawdę bootstrap.css.mapplik wciąż się kolejkuje, ale projekt modernizr-js-js nie ładuje się, więc działa częściowo. Jak mogę to rozwiązać?

Próbowałem nawet priorytetów działania:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
Mayeenul Islam
źródło

Odpowiedzi:

24

Jesteś bardzo blisko rozwiązania, ponieważ jesteś na właściwej ścieżce. Wystarczy trochę ulepszyć:

Istnieją dwa takie haki działania:

  1. wp_print_scripts, i
  2. wp_print_styles

Tak więc możesz to zrobić: zaczepiaj ich inaczej:

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

Prawidłowym sposobem jest wyrejestrowanie ich obok usuwania z kolejki. Najpierw usuń je z listy, a następnie odpowiednio je wyrejestruj.

Mayeenul Islam
źródło
zgodnie z dokumentami : Od WordPress 3.3 wp_print_scripts nie powinien być używany do kolejkowania stylów lub skryptów. Zamiast tego użyj skryptów wp_enqueue_scripts.
rok
@ user1264304 Nie porządkujemy tutaj, usuwamy kolejkę.
Mayeenul Islam,
1
tak, ale zgodnie z linkiem należy użyćadd_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok