Aggiorna la versione di jquery


24

Corro WordPress versione 4.7.2. e utilizza jQuery versione 1.12. Devo aggiornare questa versione a una versione successiva. L'ho sostituito con una nuova versione prima, ma quando aggiorno il core di WordPress viene nuovamente sostituito con 1.12. Come posso cambiare la versione di jQuery che WordPress utilizza in modo permanente?

Risposte:


29

Avvertenza: non è necessario sostituire la versione jQuery principale, specialmente nel pannello di amministrazione . Poiché molte funzionalità di base di WordPress possono dipendere dalla versione. Inoltre, altri plugin potrebbero dipendere dallajQueryversione aggiunta nel core.

Se sei sicuro di voler cambiare la jQueryversione principale , in quel caso puoi aggiungere il seguente CODICE nel functions.phpfile del tuo tema attivo (ancora meglio se crei un plugin per questo):

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery' );
    // Change the URL if you want to load a local copy of jQuery from your own 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 jQueryversione principale e invece caricherà la versione 3.1.1dal server di Google.

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

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

In questo modo, anche dopo aver aggiornato WordPress, avrai la versione di jQuerycome desideri.

Una funzione leggermente migliore:

La replace_core_jquery_versionfunzione sopra rimuove anche gli jquery-migratescript aggiunti dal core di WordPress. Questo è ragionevole, perché la versione più recente di jQuery non funzionerà correttamente con una versione precedente di jquery-migrate. Tuttavia, puoi includere anche una versione più recente di jquery-migrate. In tal caso, utilizzare 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' );
}

Puoi semplicemente rimuovere l'azione da Functions.php se trovi che rompe il tuo tema? Tornerà alla versione jQuery originale o si tratta di una modifica permanente?
Nick,

1
Se la funzione di callback wp_enqueue_scriptsdell'azione aggiorna solo jQuery e jQuery viene accodato da qualche altra parte, la rimozione dell'azione ripristinerà jQuery originale. Tuttavia, a volte i browser memorizzano nella cache il vecchio CODICE, a seconda delle impostazioni della cache del server, quindi, per farlo, dovrai svuotare la cache del browser per vedere la modifica.
Fayaz,

ok grazie volevo solo assicurarmi di non aver rovinato il mio sito prima di aggiungere questa azione. Ho avuto la sensazione che quello che hai detto sia accurato, ma volevo giocarlo sul sicuro.
Nick,

1
Questo ovviamente non è permanente , poiché questa modifica dipende dal CODICE stesso, nulla viene salvato nel database. Quindi la rimozione del relativo CODICE tornerà al vecchio stato.
Fayaz,

Lo script di migrazione per le versioni 3.x non funziona quando plug-in / temi prevedono una versione inferiore a 1.12. Maggiori informazioni qui: wordpress.stackexchange.com/a/244543/75495
cjbj

5

Ho sviluppato un plugin per questo problema specifico. Il plugin non scherza con WordPress jQuery in quanto viene caricato solo nel front-end. Vedi: jQuery Manager per WordPress

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

Poiché nessuno degli strumenti di sviluppo consente di selezionare una versione specifica di jQuery e / o jQuery Migrate. Fornire sia la versione di produzione che quella ridotta. Vedi le caratteristiche di seguito!

✅ Eseguito solo nel front-end, non interferisce con admin / backend WordPress e personalizzatore WP (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

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

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


Quasi tutti usano l'handle errato

WordPress utilizza effettivamente 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

Ulteriori informazioni sugli alias: wp_register_script identificatori multipli?

Il modo corretto di farlo

Nel mio esempio di seguito uso il CDN jQuery ufficiale su https://code.jquery.com Uso anche script_loader_tag in modo da poter aggiungere alcuni attributi CDN.
È possibile utilizzare il seguente codice:

// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and 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 'We are in the WP Admin or in the WP Customizer';
        return;
    }
    else {
        // Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
        // Deregister WP jQuery
        wp_deregister_script( 'jquery-core' );
        // Deregister WP jQuery Migrate
        wp_deregister_script( 'jquery-migrate' );

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

        /**
         * Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
         * see /wordpress/283828/wp-register-script-multiple-identifiers
         * We first register the script and afther that we enqueue it, see why:
         * /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * /programming/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 );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.