WordPress 4.5 güncellemesinden sonra can sıkıcı “JQMIGRATE: Migrate…” konsolunda


53

Neden sürekli bir bildirim var?

JQMIGRATE: Göç yüklü, sürüm 1.4.0

load-scripts.phptemamı WordPress 4.5 olarak güncellediğimde konsolumda işaret ediyor ve nasıl kaldırılabilir?

Bu bir hata değil, ama her zaman konsolumda var ve bunun ne anlama geldiğini gerçekten göremiyorum. Bir şeyi güncellemeli miyim veya kodumda bazı değişiklikler yapmalı mıyım?

Belki biraz OKB'ye sahibim, ancak genellikle siteyi incelediğimde, konsolumda bir soruna işaret eden hataları ve gerçek bildirimleri görmeyi seviyorum.


Çok kullanışlı OKB'nizi + 1'leyin. Bu muhtemelen jquery migrasyon / geriye dönük uyumluluk komut dosyasından gelir. Unminiified / dev versiyonunu kullanma şansın var mı?
Mark Kaplun

Unminiified göçü sürümü? Bildiğim kadarıyla hayır, bazı eklentiler olabilir, ancak inceleme üzerine hiçbirini göremiyorum: \
dingo_d

1
Her iki sürüm dikkat WP dirs içindedir: /wp-admin/js/jquery/jquery-migrate.jsve/wp-admin/js/jquery/jquery-migrate.min.js
Majick

Yanıtlar:


50

WordPress, jQuery'nin daha yeni sürümlerinden kaldırılan işlevselliği kullanan kullanabileceğiniz tüm eklentiler veya temalar için geriye dönük uyumluluk sağlamak için jQuery migrating komut dosyasını kullanır.

WordPress 4.5 sürümüyle birlikte, bunların jQuery sürümü göç yükseltilmiş görünen v1.2.1 için v1.4.0 - kodu ile hızlı bir tarama bakılmaksızın komut yüklenmiş olduğundan v1.4.0 günlükleri ortaya koymaktadır olması olsun veya olmasın migrateMuteBu seçenek hem sıkıştırılmamış hem de küçültülmüş sürümlerde ayarlanır.

Bildirimi kaldırmanın tek yolu, tüm eklentilerinizin / tema kodunuzun eski jQuery işlevlerine güvenmemesini sağlamak ve ardından geçiş komut dosyasını kaldırmaktır. Bunu yapmak için orada bir eklenti var, ama sadece temanın fonksiyon dosyasına veya benzerine yerleştirilebilecek oldukça basit bir yöntem:

add_action('wp_default_scripts', function ($scripts) {
    if (!empty($scripts->registered['jquery'])) {
        $scripts->registered['jquery']->deps = array_diff($scripts->registered['jquery']->deps, ['jquery-migrate']);
    }
});

Lütfen bunun WordPress geliştirme için en iyi uygulama olarak kabul edilmediğini ve bence geliştirici konsolunun temiz tutulması amacıyla geçiş komut dosyasının kaldırılmaması gerektiğini düşünüyorum.


Yani temelde eklentilerimden biri eski jQuery sürümünün bir parçası olan bir işlevselliğe mi bağlı? Bu işlevselliğin ne olduğunu bulmanın bir yolu var mı? Yoksa sadece geçiş komut dosyasını kapatmak için güvenli miyim?
dingo_d

1
Eklentilerinizden herhangi birinin eski işlevlere bağlı olup olmadığını kesin olarak söyleyemem, WordPress, yüklemenizin bir süre önce güncellenmemiş eklentileri varsa, taşıma komut dosyasını güvenli bir varsayılan olarak içerir. Ben olsaydım, sitenin yerel bir kurulumunda göçmen komut dosyasını kaldırırdım ve sonra her şeyin hala beklendiği gibi çalışıp çalışmadığını kontrol ederim, böylece konsolda hata olmamasını
Andy

Buna karşı öneriyorum. Bu geriye dönük uyumluluk bir nedeni var. WordPress'teki kullanım dışı işlevler dosyasını silme jQuery eşdeğeridir. Mevcut kurulumunuzun tamamen uyumlu olup olmadığını kontrol etme sorununa gitmek, kurulum değişikliklerini veya eklenti eklemelerini bile hesaba katmaz ve oluşturduğunuz olası sorunlar göz önüne alındığında, konsol günlüğü mesajının kaldırılmasının tamamen şüpheli yararına karşı denge olmaz .
majick

1
@majick Komut dosyasının kaldırılmasının iyi bir fikir olup olmadığını tartışmak, bu cevabın kapsamı dışındadır, bu özellikle konsoldaki mesajın nasıl kaldırılacağı sorununu ele almaktadır. FWIW, betiği kaldırmak da kötü bir fikir olduğunu düşünüyorum. Sanırım yanıtın OP'lerin sorusuna tam olarak cevap vermesi nedeniyle olumsuz oylamanın gerekmediğini düşünüyorum.
Andy,

1
üzgünüm, sık sık küçümsemiyorum, ancak bunun iyi bir fikir olamayacağına dair bir uyarı olmadığından ve geliştirme konusundaki en iyi uygulamanın zıttı olduğu için burada ihtiyaç duyulduğunu hissettim (bir uyarı ekleyeceğim ve aşağı oyu kaldıracağım.) Sorunun, yalnızca konsol iletisinin nasıl kaldırılacağını sormadığına inanıyorum. Birisi WordPress'teki güncelleme nag mesajını nasıl kaldıracağını sorsa, cevap vermezdiniz "sadece WordPress'i kaldırın."
majick

11

Günlük mesajı metnini boş olarak değiştirebilirsiniz, jquery-migrate.min.jsancak bu çekirdek güncellemede korunmaz.

Alternatif, migrasyon console.logkomut dosyası yüklenmeden hemen önce geçiş / filtre işlevinin kopyasını eklemek ve ' Migrate is installed' içeren günlük iletilerini yoksaymasını söylemektir . Bu şekilde yapmak diğer Migrate uyarılarını da koruyacaktır:

// silencer script
function jquery_migrate_silencer() {
    // create function copy
    $silencer = '<script>window.console.logger = window.console.log; ';
    // modify original function to filter and use function copy
    $silencer .= 'window.console.log = function(tolog) {';
    // bug out if empty to prevent error
    $silencer .= 'if (tolog == null) {return;} ';
    // filter messages containing string
    $silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
    $silencer .= 'console.logger(tolog);} ';
    $silencer .= '}</script>';
    return $silencer;
}

// for the frontend, use script_loader_tag filter
add_filter('script_loader_tag','jquery_migrate_load_silencer', 10, 2);
function jquery_migrate_load_silencer($tag, $handle) {
    if ($handle == 'jquery-migrate') {
        $silencer = jquery_migrate_silencer();
        // prepend to jquery migrate loading
        $tag = $silencer.$tag;
    }
    return $tag;
}

// for the admin, hook to admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}

Sonuç, istenen efekti sağlayan hem ön hem de arka uca eklenen tek bir HTML komut dosyası satırıdır (yüklü iletiyi engeller).


1
Fikir için +1, ancak siteniz buysa, tüm komut dosyalarınızın en son sürümle uyumlu olduğundan ve
göççüyü

evet, ancak göçmenlerin bir uygulama olarak kaldırılması konusunda hemfikir değilim, çünkü henüz en son jQuery ile uyumlu olmayabilecek temalar / eklentiler yüklemeyi hesaba katmıyor. Paralel olarak burada bir WordPress işlevi görmemiş olsalar bile ya da "resmen" kullanımdan kaldırılmış olsalar bile hala iyi çalışan birçok eklenti var. geriye dönük uyumluluk hem genel olarak hem de yazılıma gelince, önlem almaktan ve tedavi etmekten daha iyidir.
majick

2
Haklısın, ancak son jquery sürümünü desteklemeyen bir hata IMO. 4.5 yaklaşık bir ay önce RC'ye girdi ve kod, girdiği tüm değişikliklerle çalışmak için test edilmediyse, tema / eklenti gerçekten uyumlu değil. Dış dünyadaki wordpress kullanım dışı bırakma mesajları bir noktada gerçek kullanım dışı bırakmaya dönüşür ve ASAP'ı yükseltmek zorunda olduğunuz zamana göre onları bırakmak istemezsiniz. Göçmen IMO, kalıcı bir özellik değil, geçici bir çözüm olmalıdır.
Mark Kaplun

2
Buradaki müdürlere katılmıyorum, internet hızlı hareket eden bir hedef ve manzara her zaman değişiyor. (örneğin, site logosu özelliğini 4.5'e getirmek için harcadığı zaman, siteler yalnızca bir logoya sahip olma fikrinden yola çıkmıştır). Eski, yalnızca çok spesifik ve kararlı nişlere uygulandığında iyidir, ancak örneğin jQuery'nin nispeten hareketli bir hedef olduğu bilinmektedir.
Mark Kaplun

1
Bir tema izole edilmiş bir ürün değildir. Bir tema wordpress ve jquery vs. paketliyorsa, o zaman temanın yaşı tamamen alakalı olurdu. Hiçbir tema bunu yapmazsa, tema kullanılan wordpress versiyonuna karşı test edilmediyse, ne tür hataların keşfedileceği yeterince açık değildir. Bu, statik ve dinamik bağlantı ikileminin bir başka tezahürüdür. Statik bir bağlantı dünyasında iddianız çoğunlukla doğrudur, ancak wordpress dinamik bağlantıdır ve yalnızca 3.5 ile çalıştığı için, geri uyumlu olma girişimi olsa bile 4.5 ile çalışacağı anlamına gelmez
Mark Kaplun

7

Burada sadece küçük bir test.

Jquery-migrate.js dosyasına göz attım ve şu bölümü fark ettim:

// Set to true to prevent console output; migrateWarnings still maintained
// jQuery.migrateMute = false;

bu yüzden aşağıdakileri wp_add_inline_script()4.5 versiyonunda tanıtılanlarla test ettim :

add_action( 'wp_enqueue_scripts', function()
{   
    wp_add_inline_script( 
        'jquery-migrate', 'jQuery.migrateMute = true;',
        'before' 
    );
} );

Bu değişecek:

JQMIGRATE: Migrate aktif günlük kaydı ile yüklenir, sürüm 1.4.0

için:

JQMIGRATE: Göç yüklü, sürüm 1.4.0

Bu nedenle, bu kısımdaki gibi tüm konsol çıktısını engellemez jquery-migrate.js:

// Show a message on the console so devs know we're active
if ( window.console && window.console.log ) {
    window.console.log( "JQMIGRATE: Migrate is installed" +
        ( jQuery.migrateMute ? "" : " with logging active" ) +
        ", version " + jQuery.migrateVersion );
}

1
Yani alt kod sadece mesajı kaldırıyor, değil mi? Yani, göç kalır ama mesaj bastırılmış, değil mi? Bu kesinlikle göçü kaldırmaktan daha iyidir
dingo_d

1
hayır, bu konsol günlüğü mesaj üreten bir kod kopyasıdır yapar çıktı. İlk yarı bağımsız çıkış ... - bu migrateMute sadece konsol mesajın ikinci yarısı için test edildiğini gösterir çıkarmadan konsol mesaj kaldıracaktır bu kod bloğunu, ancak her WP güncelleme olduğunu yinelemek gerekir.
majick

2
Araştırma ve detaylar için teşekkürler! IMO en iyi seçenek çünkü JQmigrate'ı kaldırmak her zaman iyi bir fikir değil çünkü birçok WP eklentisi kullanımdan kaldırılmış jQuery işlevlerine bağlı. Bu çözüm, konsol çıktısını biraz temizlemeye yardımcı olur!
Philipp,

1

Çözüm:

Bunu functions.php'ye ekleyin:

function remove_jquery_migrate_notice() {
    $m= $GLOBALS['wp_scripts']->registered['jquery-migrate'];
    $m->extra['before'][]='temp_jm_logconsole = window.console.log; window.console.log=null;';
    $m->extra['after'][]='window.console.log=temp_jm_logconsole;';
}
add_action( 'init', 'remove_jquery_migrate_notice', 5 );

jquery-migrateStandart kanca ile (çıkışlar <link rel=stylesheet....>) çağrıldığında ve load-scripts.phptoplu olarak (yönetici-gösterge panelindeki gibi ) çağrıldığında çalışır .


1

Aynı sorunu vardı ve sadece ayarlamanız gerekir öğrendim SCRIPT_DEBUGetmek falseGözlerinde farklı wp-config.php. Umarım bu birine yardımcı olur


2
Bu benim için işe yaramadı.
Serj Sagan

-1

Andy WordPress tarafından daha önce de belirtildiği gibi , geriye dönük uyumluluk sağlamak için jQuery migrate komut dosyasını kullanır ve bu yüzden varsayılan olarak otomatik olarak yüklenir.

İşte JQuery Migrate modülünü çıkarmanın ve böylece sayfanızın müşteri tarafında yüklenmesini hızlandırırken can sıkıcı JQMIGRATE uyarısından kurtulmanın güvenli bir yolu. Bu kodu functions.php dosyasına kopyalayıp yapıştırın; işleminiz bitti:

<?php
/**
 * Disable jQuery Migrate in WordPress.
 *
 * @author Guy Dumais.
 * @link https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/
 */
add_filter( 'wp_default_scripts', $af = static function( &$scripts) {
    if(!is_admin()) {
        $scripts->remove( 'jquery');
        $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
    }    
}, PHP_INT_MAX );
unset( $af );


Daha fazla detay

Statik bir işlev kullanmamın nedeni hakkında daha fazla bilgi edinmek için makalemi buradan okuyun:
►► https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/


2
çünkü bu 1. bir spam'in çok fazla kokuyor ve bir cevap gibi hissetmek için minimum çabayı gösteriyor. 2. Sürümü geçersiz kılan önbellek bozmayı zorlaştırıyorsunuz.
Mark Kaplun

utanç verici çünkü güzel bir yaklaşım, hatta add_filterbir eylem yaparken kullandığınız bile .
pcarvalho
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.