Cum să dezactivezi corect scripturile și stilurile într-o temă copil?

31 mai 2015, 12:17:29
Vizualizări: 59.3K
Voturi: 23

Am creat o temă părinte și o temă copil într-unul din proiectele mele. Am înregistrat CSS și JavaScript în tema părinte astfel:

function project_necessary_scripts() {
    //Foi de stil
    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' );

Acum, în tema copil vreau să dezactivez unele foi de stil și scripturi JavaScript. Așa că am folosit următorul cod:

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

Dar de fapt fișierul bootstrap.css.map încă se încarcă, în timp ce modernizr-js și project-js nu se mai încarcă, deci funcționează parțial. Cum pot rezolva această problemă?

Am încercat chiar și cu priorități pentru acțiuni:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
0
Toate răspunsurile la întrebare 3
4
47

Ești foarte aproape de soluție, pentru că ești pe calea cea bună. Doar că mai trebuie să ajustezi puțin:

Există două hook-uri de acțiune:

  1. wp_print_scripts, și
  2. wp_print_styles

Așadar, modalitatea prin care poți face acest lucru este să le atașezi diferit:

// Elimină stilurile
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

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

Și metoda corectă este să le deregistrezi pe lângă eliminare. Deci, mai întâi le elimini, iar apoi le deregistrezi corespunzător.

31 mai 2015 12:17:29
Comentarii

conform documentației: Începând cu WordPress 3.3, wp_print_scripts nu ar trebui folosit pentru a încărca stiluri sau scripturi. Folosește wp_enqueue_scripts în schimb.

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

@user1264304 Nu încărcăm aici resurse, ci le scoatem din coadă.

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

da, dar conform linkului, ar trebui folosit add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')

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

Întrebarea și răspunsul acceptat (acesta) sunt de la aceeași persoană. Metoda corectă, totuși, este de a utiliza acțiunea wp_enqueue_scripts. Răspunsul oferit de @morshed-alam-sumon este metoda corectă. Singurul motiv pentru care utilizarea cârligului (hook) wp_print_scripts ar funcționa este că se declanșează târziu. Tehnic, ai putea folosi orice acțiune care s-a declanșat după ce originalul a fost încărcat cu wp_enqueue_scripts, dar aceasta nu este abordarea corectă. Motivul pentru a face lucrurile corect este că orice altă metodă care funcționează acum nu garantează că va funcționa și în viitor, în funcție de schimbările din nucleu.

butlerblog butlerblog
26 mar. 2025 13:55:31
0

Acesta nu este modul corect. WordPress a spus să nu folosiți atât wp_print_scripts, cât și wp_print_styles începând cu WordPress 3.3.

Fie că încărcați sau descărcați scripturi, modul corect este:

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

Nu uitați să folosiți prioritatea. Fără prioritate, nu va funcționa.

10 apr. 2021 22:58:52
1

Pentru a elimina scripturile (Dequeue Scripts), nu adăugați sufixul "-js" sau "-css" la partea de ID. Am folosit WordPress 5.8. A funcționat pentru mine.

CODUL DE MAI SUS:

//Elimină scripturile JavaScript
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' );

CODUL CARE FUNCȚIONEAZĂ:

//Elimină scripturile JavaScript
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' );

Asigurați-vă că verificați codul sursă al paginii pentru ID-ul scriptului înainte de a elimina partea "-js". Eliminați doar ultimul sufix -js.

De exemplu: Dacă ID-ul scriptului dvs. este project-js-js, atunci eliminați doar ultimul -js și folosiți project-js în acțiunea de eliminare. Același lucru este valabil și pentru CSS - eliminați doar ultimul sufix "-css".

24 oct. 2021 01:14:00
Comentarii

Aceasta a fost cheia pentru mine, m-am luptat cu asta ore întregi. Mulțumesc.

cdsaenz cdsaenz
20 feb. 2022 17:20:30