Jquery sürümünü güncelle


24

WordPress 4.7.2 sürümünü çalıştırıyorum. ve jQuery sürüm 1.12 kullanır. Bu sürümü daha yüksek bir sürüme güncellemem gerekiyor. Daha önce yeni bir sürümle değiştirdim, ancak WordPress çekirdeğini yükseltirken tekrar 1.12 ile değiştirildi. WordPress'in kalıcı olarak kullandığı jQuery sürümünü nasıl değiştirebilirim?

Yanıtlar:


29

Uyarı: Core jQuery sürümünü, özellikle yönetici panelinde değiştirmemelisiniz . Çünkü çoğu WordPress çekirdek işlevi sürüme bağlı olabilir. Ayrıca, diğer eklentilerjQueryçekirdeğe eklenen sürümede bağlı olabilir.

Çekirdek jQuerysürümünü değiştirmek istediğinizden eminseniz, bu durumda etkin temanızın functions.phpdosyasına aşağıdaki KODU ekleyebilirsiniz (bunun için bir eklenti oluşturursanız daha iyi):

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

Bu, çekirdek jQuerysürümün yerine geçecek ve bunun yerine 3.1.1Google sunucusundan sürüm yükleyecektir .

Ayrıca, tavsiye edilmese de, jQuery sürümünü de değiştirmek için aşağıdaki ek KOD satırını kullanabilirsiniz wp-admin:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

Bu sayede, WordPress'i güncelledikten sonra bile jQueryistediğiniz şekilde versiyona sahip olacaksınız .

Biraz daha iyi bir fonksiyon:

Yukarıdaki replace_core_jquery_versionişlev jquery-migrate, WordPress çekirdeği tarafından eklenen komut dosyasını da kaldırır . Bu mantıklı, çünkü jQuery'nin en yeni sürümü eski sürümüyle düzgün çalışmayacak jquery-migrate. Ancak, daha yeni bir sürümünü de ekleyebilirsiniz jquery-migrate. Bu durumda, aşağıdaki işlevi kullanın:

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

Temanızı bozduğunu tespit ederseniz, eylemi function.php'den kaldırabilir misiniz? Orijinal jQuery sürümüne geri dönecek mi, yoksa bu kalıcı bir değişiklik mi?
Nick

1
İşlemin geri çağırma işlevi wp_enqueue_scriptsyalnızca jQuery'yi güncellerse ve jQuery başka bir yerden gizleniyorsa, eylemi kaldırmak orijinal jQuery'i geri yükleyecektir. Bununla birlikte, bazen tarayıcılar sunucu önbellek ayarlarına bağlı olarak eski KODU önbelleğe alırlar. Dolayısıyla, değişikliği görmek için bunu yaptıktan sonra tarayıcı önbelleğini temizlemeniz gerekir.
Fayaz

Tamam teşekkürler, bu işlemi eklemeden önce sitemi mahvetmediğimden emin olmak istedim. Söylediklerinin doğru olduğunu hissediyorum ama güvenli bir şekilde oynamak istedim.
Nick

1
Bu açıkça kalıcı değildir , çünkü bu değişiklik KOD'un kendisine bağlıdır, veritabanına hiçbir şey kaydedilmez. Böylece ilgili KOD'un kaldırılması eski haline geri dönecektir.
Fayaz

Eklentiler / temalar 1.12'nin altında bir sürüm beklediğinde 3.x sürümleri için geçirme komut dosyası çalışmaz. Bu konuda daha fazla burada: wordpress.stackexchange.com/a/244543/75495
cjbj

5

Bu özel problem için bir eklenti geliştirdim. Eklenti, yalnızca ön uçta yüklendiği için WordPress jQuery ile karışmaz. Bakınız: WordPress için jQuery Yöneticisi

Neden başka bir jQuery Güncelleyici / Yönetici / Geliştirici / Hata Ayıklama aracı?

Çünkü geliştirici araçlarından hiçbiri, belirli bir jQuery ve / veya jQuery Migrate sürümünü seçmenize izin vermez. Hem prodüksiyon hem de küçültülmüş versiyon sağlamak. Aşağıdaki özelliklere bakın!

✅ Yalnızca ön uçta yürütülür, WordPress admin / backend ve WP customizer ile etkileşime girmez (uyumluluk nedeniyle) Bkz. Https://core.trac.wordpress.org/ticket/45130 ve https: // core. trac.wordpress.org/ticket/37110

J jQuery ve / veya jQuery Migrate'ı açın / kapatın

J jQuery ve / veya jQuery Migrate'ın belirli bir sürümünü etkinleştirin

Ve daha fazlası! Kod açık kaynaktır, böylece onu inceleyebilir, ondan öğrenebilir ve katkıda bulunabilirsiniz.


Neredeyse herkes yanlış tanıtıcı kullanıyor

WordPress aslında jquery'yi değil, jquery-core tanıtıcısını kullanır:

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

Jquery kolu yük sadece bir takma addır jquery-çekirdekli ile jquery-göç

takma adları hakkında daha fazla bilgiyi bakınız: wp_register_script birden fazla tanımlayıcı?

Bunu yapmanın doğru yolu

Aşağıdaki örnekte https://code.jquery.com adresindeki resmi jQuery CDN’ini kullanıyorum. Ayrıca bazı CDN niteliklerini ekleyebilmek için script_loader_tag dosyasını kullanıyorum .
Aşağıdaki kodu kullanabilirsiniz:

// 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 );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.