Come rimuovere correttamente script e stili nel tema child?

31 mag 2015, 12:17:29
Visualizzazioni: 59.3K
Voti: 23

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 );
0
Tutte le risposte alla domanda 3
4
47

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:

  1. wp_print_scripts, e
  2. wp_print_styles

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.

31 mag 2015 12:17:29
Commenti

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

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

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

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

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

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

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.

butlerblog butlerblog
26 mar 2025 13:55:31
0

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

10 apr 2021 22:58:52
1

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

24 ott 2021 01:14:00
Commenti

Questo è stato fondamentale per me, ho combattuto con questo per ore. Grazie.

cdsaenz cdsaenz
20 feb 2022 17:20:30