Come rimuovere correttamente script e stili nel tema child?
Ho creato un tema parent e un tema child in uno dei miei progetti. Ho accodato CSS e JavaScript nel mio tema parent come segue:
function project_necessary_scripts() {
//Fogli di stile
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' );
//JavaScript
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' );
Ora, nel mio tema child voglio rimuovere alcuni fogli di stile e javascript. Quindi ho usato il seguente codice:
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' );
Ma in realtà il file bootstrap.css.map
viene ancora caricato, mentre modernizr-js e project-js non vengono caricati, quindi funziona solo parzialmente. Come posso risolvere?
Ho anche provato con le priorità dell'azione:
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );

Sei molto vicino alla soluzione, perché sei sulla strada giusta. Basta solo fare qualche piccolo aggiustamento:
Ci sono due hook di azione di questo tipo:
Quindi il modo in cui puoi farlo è: agganciarli in modo diverso:
//Rimuovere gli stili dalla coda
function project_dequeue_unnecessary_styles() {
wp_dequeue_style( 'bootstrap-map' );
wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );
//Rimuovere gli script dalla coda
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' );
E il modo corretto è deregistrarli oltre a rimuoverli dalla coda. Quindi prima rimuovili dalla coda e poi deregistrali di conseguenza.

secondo la documentazione: Da WordPress 3.3, wp_print_scripts non dovrebbe essere usato per accodare stili o script. Usa wp_enqueue_scripts invece.

@user1264304 Qui non stiamo accodando elementi, li stiamo rimuovendo dalla coda.

sì, ma secondo questo link, si dovrebbe usare add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')

La domanda e la risposta accettata (questa) sono della stessa persona. Il modo corretto, tuttavia, è utilizzare l'azione wp_enqueue_scripts
. La risposta di @morshed-alam-sumon è il metodo appropriato. L'unico motivo per cui agganciarsi a wp_print_scripts
funzionerebbe è che viene attivato tardi. Tecnicamente, potresti usare qualsiasi azione che viene eseguita dopo che l'originale è stato accodato con wp_enqueue_scripts
, ma questo non è l'approccio corretto. Il motivo per farlo nel modo giusto è che qualsiasi altro metodo che funziona ora non garantisce che funzionerà in futuro a causa di cambiamenti nel core.

Questo non è il modo corretto. WordPress ha dichiarato di non utilizzare sia wp_print_scripts che wp_print_styles a partire da WordPress 3.3.
Sia che tu stia accodando (enqueueing) o rimuovendo (dequeueing), il modo corretto è:
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 );
Non dimenticare di utilizzare la priorità. Senza priorità, non funzionerà.

Per rimuovere gli script dalla coda, non aggiungere l'ultimo "-js" o "-css" nella parte dell'ID. Io stavo usando WordPress 5.8. Funziona per me.
CODICE SOPRA:
//Rimuove gli script JavaScript dalla coda
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' );
CODICE FUNZIONANTE:
//Rimuove gli script JavaScript dalla coda
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' );
Assicurati di controllare il codice sorgente della pagina per l'ID dello script prima di rimuovere la parte "-js". Rimuovi solo l'ultimo -js.
Ad esempio: Se il tuo Script ID è project-js-js allora rimuovi solo l'ultimo -js e usa project-js nell'azione di dequeue. Lo stesso vale per il CSS, rimuovi solo l'ultima parte "-css".
