Cum să dezactivezi corect scripturile și stilurile într-o temă copil?
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 );

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

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.

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

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

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.

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