Perbarui versi jquery

24

Saya menjalankan WordPress versi 4.7.2. dan ia menggunakan jQuery versi 1.12. Saya perlu memperbarui versi ini ke versi yang lebih tinggi. Saya menggantinya dengan versi baru sebelumnya, tetapi ketika saya memutakhirkan inti WordPress itu diganti dengan 1,12 lagi. Bagaimana saya bisa mengubah versi jQuery yang digunakan WordPress secara permanen?

Siamak Ferdos
sumber

Jawaban:

29

Peringatan: Anda tidak harus mengganti versi inti jQuery, terutama di panel admin . Karena banyak fungsi inti WordPress mungkin bergantung pada versi. Juga, plugin lain mungkin tergantung padajQueryversi yang ditambahkan di inti.

Jika Anda yakin ingin mengubah jQueryversi inti , dalam hal ini Anda dapat menambahkan KODE berikut dalam functions.phpfile tema aktif Anda (bahkan lebih baik jika Anda membuat plugin untuk ini):

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' );

Ini akan menggantikan jQueryversi inti dan bukannya memuat versi 3.1.1dari server Google.

Selain itu, meskipun tidak disarankan , Anda dapat menggunakan baris tambahan CODE berikut untuk mengganti versi jQuery wp-adminjuga:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

Dengan cara ini, bahkan setelah memperbarui WordPress, Anda akan memiliki versi yang jQueryAnda inginkan.

Fungsi yang sedikit lebih baik:

The replace_core_jquery_versionfungsi di atas juga menghilangkan jquery-migratenaskah ditambah dengan inti WordPress. Ini masuk akal, karena versi terbaru dari jQuery tidak akan berfungsi dengan baik dengan versi yang lebih lama jquery-migrate. Namun, Anda dapat memasukkan versi yang lebih baru jquery-migratejuga. Dalam hal ini, gunakan fungsi berikut sebagai gantinya:

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' );
}
Fayaz
sumber
Bisakah Anda menghapus tindakan dari functions.php jika Anda menemukan itu merusak tema Anda? Apakah akan kembali ke versi jQuery asli atau ini perubahan permanen?
Nick
1
Jika fungsi panggilan balik wp_enqueue_scriptstindakan hanya memperbarui jQuery dan jQuery sedang enqueued dari tempat lain, maka menghapus tindakan akan mengembalikan jQuery asli. Namun, terkadang browser cache KODE lama, tergantung pada pengaturan cache server, Jadi, Anda harus menghapus cache browser setelah Anda melakukannya untuk melihat perubahannya.
Fayaz
ok terima kasih saya hanya ingin memastikan saya tidak mengacaukan situs saya sebelum menambahkan tindakan ini. Saya memiliki perasaan apa yang Anda katakan akurat tetapi saya ingin bermain aman.
Nick
1
Ini jelas tidak permanen , karena perubahan ini tergantung pada KODE itu sendiri, tidak ada yang disimpan di database. Jadi menghapus KODE terkait akan mengembalikan kembali ke kondisi lama.
Fayaz
Skrip migrasi untuk versi 3.x tidak berfungsi saat plugin / tema mengharapkan versi di bawah 1.12. Lebih lanjut tentang itu di sini: wordpress.stackexchange.com/a/244543/75495
cjbj
5

Saya telah mengembangkan sebuah plugin untuk masalah khusus ini. Plugin tidak mengacaukan dengan WordPress jQuery karena hanya dimuat di front-end. Lihat: Manajer jQuery untuk WordPress

Mengapa alat Updater / Manager / Pengembang / Debugging jQuery lain?

Karena tidak ada alat pengembang yang memungkinkan Anda memilih versi jQuery dan / atau jQuery Migrate tertentu. Menyediakan versi produksi dan versi minifikasi. Lihat fitur di bawah ini!

✅ Hanya dieksekusi di front-end, tidak mengganggu admin WordPress / backend dan penyesuai WP (untuk alasan kompatibilitas) Lihat: https://core.trac.wordpress.org/ticket/45130 dan https: // core. trac.wordpress.org/ticket/37110

Mengaktifkan / menonaktifkan jQuery dan / atau jQuery Migrasi

✅ Aktifkan versi spesifik jQuery dan / atau jQuery Migrate

Dan banyak lagi! Kode ini open source, jadi Anda bisa mempelajarinya, belajar darinya, dan berkontribusi.


Hampir semua orang menggunakan pegangan yang salah

WordPress sebenarnya menggunakan jquery-core, bukan 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' );

The jquery pegangan hanya sebuah alias untuk beban jquery-core dengan jquery-bermigrasi

Lihat info lebih lanjut tentang alias: wp_register_script beberapa pengenal?

Cara yang benar untuk melakukannya

Dalam contoh saya di bawah ini saya menggunakan CDN jQuery resmi di https://code.jquery.com Saya juga menggunakan script_loader_tag sehingga saya dapat menambahkan beberapa atribut CDN.
Anda dapat menggunakan kode berikut:

// 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 );
Remzi Cavdar
sumber