Aggiornare la versione di jQuery

21 feb 2017, 11:02:03
Visualizzazioni: 68.6K
Voti: 38

Utilizzo WordPress versione 4.7.2 che impiega jQuery versione 1.12. Devo aggiornare questa versione ad una più recente. L'ho già sostituita con una nuova versione in precedenza, ma quando aggiorno il core di WordPress viene ripristinata alla 1.12. Come posso modificare permanentemente la versione di jQuery utilizzata da WordPress?

0
Tutte le risposte alla domanda 2
7
47

Attenzione: Non dovresti sostituire la versione core di jQuery, specialmente nel pannello di amministrazione. Poiché molte funzionalità core di WordPress potrebbero dipendere da questa versione. Inoltre, altri plugin potrebbero dipendere dalla versione di jQuery inclusa nel core.

Se sei sicuro di voler cambiare la versione core di jQuery, in tal caso puoi aggiungere il seguente CODICE nel file functions.php del tuo tema attivo (ancora meglio se crei un plugin apposito):

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery' );
    // Modifica l'URL se vuoi caricare una copia locale di jQuery dal tuo server.
    wp_register_script( 'jquery', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
}
add_action( 'wp_enqueue_scripts', 'replace_core_jquery_version' );

Questo sostituirà la versione core di jQuery e caricherà invece la versione 3.1.1 dal server di Google.

Inoltre, sebbene non sia raccomandato, puoi utilizzare la seguente riga aggiuntiva di CODICE per sostituire anche la versione di jQuery in wp-admin:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

In questo modo, anche dopo gli aggiornamenti di WordPress, avrai la versione di jQuery che desideri.

Una funzione leggermente migliore:

La funzione replace_core_jquery_version sopra indicata rimuove anche lo script jquery-migrate aggiunto dal core di WordPress. Questo è ragionevole, perché la versione più recente di jQuery non funzionerà correttamente con una versione più vecchia di jquery-migrate. Tuttavia, puoi includere anche una versione più recente di jquery-migrate. In tal caso, utilizza invece la seguente funzione:

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery-core' );
    wp_register_script( 'jquery-core', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
    wp_deregister_script( 'jquery-migrate' );
    wp_register_script( 'jquery-migrate', "https://code.jquery.com/jquery-migrate-3.0.0.min.js", array(), '3.0.0' );
}
21 feb 2017 15:16:12
Commenti

Puoi semplicemente rimuovere l'azione da functions.php se scopri che rompe il tuo tema? Tornerà alla versione originale di jQuery o è un cambiamento permanente?

Nick Nick
23 ago 2018 19:54:02

Se la funzione di callback dell'azione wp_enqueue_scripts aggiorna solo jQuery e jQuery viene accodato da qualche altra parte, allora rimuovendo l'azione verrà ripristinato il jQuery originale. Tuttavia, a volte i browser memorizzano nella cache il vecchio CODICE, a seconda delle impostazioni della cache del server, quindi dovrai svuotare la cache del browser dopo averlo fatto per vedere il cambiamento.

Fayaz Fayaz
23 ago 2018 20:37:25

ok grazie, volevo solo assicurarmi di non rovinare il mio sito prima di aggiungere questa azione. Avevo il sospetto che ciò che hai detto fosse accurato ma volevo giocare sul sicuro.

Nick Nick
23 ago 2018 20:39:13

Questo ovviamente non è permanente, poiché questa modifica dipende dal CODICE stesso, nulla viene salvato nel database. Quindi rimuovendo il CODICE correlato si tornerà allo stato precedente.

Fayaz Fayaz
23 ago 2018 20:39:28

Lo script di migrazione per le versioni 3.x non funziona quando i plugin/temi si aspettano una versione inferiore a 1.12. Maggiori informazioni qui: https://wordpress.stackexchange.com/a/244543/75495

cjbj cjbj
24 ott 2018 16:55:51

@cjbj naturalmente è così. Tuttavia, la domanda riguardava l'abbandono di 1.12, quindi ovviamente la risposta non copre questo caso.

Fayaz Fayaz
24 ott 2018 18:18:02

Sfortunatamente, non sembra funzionare in WordPress 5. Il vecchio Jquery viene scaricato, ma il nuovo non viene caricato.

TelFiRE TelFiRE
5 mar 2020 07:18:57
Mostra i restanti 2 commenti
0
17

Ho sviluppato un plugin per questo problema specifico. Il plugin non interferisce con jQuery di WordPress perché viene caricato solo nel front-end. Vedi: jQuery Manager for WordPress

Perché un altro strumento di aggiornamento/gestione/sviluppo/debug di jQuery?

Perché nessuno degli strumenti per sviluppatori ti permette di selezionare una versione specifica di jQuery e/o jQuery Migrate. Fornendo sia la versione di produzione che quella minificata. Vedi le funzionalità qui sotto!

✅ Eseguito solo nel front-end, non interferisce con l'admin/backend di WordPress e il customizer (per motivi di compatibilità) Vedi: https://core.trac.wordpress.org/ticket/45130 e https://core.trac.wordpress.org/ticket/37110

Attiva/disattiva jQuery e/o jQuery Migrate

✅ Attiva una versione specifica di jQuery e/o jQuery Migrate

E molto altro! Il codice è open source, quindi puoi studiarlo, imparare da esso e contribuire.


Quasi tutti usano l'handle sbagliato

WordPress in realtà utilizza l'handle jquery-core, non jquery:

https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226

// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );

L'handle jquery è solo un alias per caricare jquery-core con jquery-migrate

Vedi più informazioni sugli alias: wp_register_script multiple identifiers?

Il modo corretto per farlo

Nel mio esempio qui sotto utilizzo il CDN ufficiale di jQuery su https://code.jquery.com. Uso anche script_loader_tag per poter aggiungere alcuni attributi CDN.
Puoi utilizzare il seguente codice:

// Front-end non eseguito nell'admin di wp e nel customizer di wp (per motivi di compatibilità)
// Vedi: https://core.trac.wordpress.org/ticket/45130 e https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
    $wp_admin = is_admin();
    $wp_customizer = is_customize_preview();

    // jQuery
    if ( $wp_admin || $wp_customizer ) {
        // echo 'Siamo nell\'Admin di WP o nel Customizer di WP';
        return;
    }
    else {
        // Deregistra jQuery core di WP, vedi https://github.com/Remzi1993/wp-jquery-manager/issues/2 e https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // l'handle jquery è solo un alias per caricare jquery-core con jquery-migrate
        // Deregistra jQuery di WP
        wp_deregister_script( 'jquery-core' );
        // Deregistra jQuery Migrate di WP
        wp_deregister_script( 'jquery-migrate' );

        // Registra jQuery nell'head
        wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );

        /**
         * Registra jquery usando jquery-core come dipendenza, così altri script possono usare l'handle jquery
         * vedi https://wordpress.stackexchange.com/questions/283828/wp-register-script-multiple-identifiers
         * Prima registriamo lo script e dopo lo enqueue, vedi perché:
         * https://wordpress.stackexchange.com/questions/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * https://stackoverflow.com/questions/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
         */
        wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );


function add_jquery_attributes( $tag, $handle ) {
    if ( 'jquery-core' === $handle ) {
        return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );
1 lug 2019 22:15:53