web-dev-qa-db-ja.com

WordPress 4.5へのアップデート後、コンソールに迷惑な "JQMIGRATE:Migrate is ..."が表示される

なぜ絶えず注意があるのですか。

JQMIGRATE:Migrateがインストールされている、バージョン1.4.0

テーマをWordPress 4.5に更新したときにコンソールのload-scripts.phpを指していますが、どうすれば削除できますか?

それはエラーではありませんが、それは私のコンソールに常に存在しています、そして私は本当にそれのポイントが何であるかわかりません。何かを更新するべきですか、それとも私のコードに何らかの変更を加えるべきですか?

たぶん私はOCDを少し持っています、しかし、通常私がサイトを調べるとき、私は私のコンソールの問題を指摘する誤りと本当の通知を見るのが好きです...

51
dingo_d

WordPressはjQuery移行スクリプトを使用して、新しいバージョンのjQueryから削除された機能を使用している可能性のあるプラグインまたはテーマとの下位互換性を確保します。

WordPress 4.5のリリースで、jQueryのバージョンを v1.2.1 から v1.4.0にアップグレードしたようです。 - コードをざっと見ると、v1.4.0がスクリプトを記録していることがわかります。 migrateMuteオプションが設定されているかどうかにかかわらず、および非圧縮バージョンと縮小バージョンの両方でロードされます。

通知を削除する唯一の方法は、すべてのプラグイン/テーマコードが古いjQuery機能に依存していないことを確認してから、移行スクリプトを削除することです。これを行うには plugin outがありますが、これは非常に単純な方法で、テーマの関数ファイルなどに配置できます。

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

これはWordPress開発のベストプラクティスとは考えられていないことに注意してください。私の意見では、移行スクリプトは開発者コンソールをきれいに保つためだけに削除するべきではありません。

48
Andy

jquery-migrate.min.jsでログメッセージのテキストを空白に変更することはできますが、これはコアアップデートでは保持されません。

別の方法は、移行スクリプトがロードされる直前にconsole.logのパススルー/フィルター関数コピーを追加し、「Migrate is installed」を含むロギングメッセージを無視するように指示することです。このようにすると、他のMigrateの警告も保存されます。

// 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();}

その結果、フロントエンドとバックエンドの両方に1行のHTMLスクリプトが追加され、目的の効果が達成されます(インストールされたメッセージが表示されなくなります)。

11
majick

ここでちょっとテストしてください。

jquery-migrate.js を覗いてみたところ、この部分に気付いた。

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

そこで、バージョン4.5で導入された新しく wp_add_inline_script() を使って以下をテストしました。

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

これは変わります:

JQMIGRATE:Migrateはロギングアクティブ、バージョン1.4.0でインストールされます

に:

JQMIGRATE:Migrateがインストールされている、バージョン1.4.0

そのため、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 );
}
7
birgire

溶液:

これをfunctions.phpに追加してください。

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

(admin-dashboardのように)jquery-migrateが標準のフック(<link rel=stylesheet....>を出力)で呼び出され、load-scripts.phpが一括して呼び出されない場合に機能します。

1
T.Todua

同じ問題を抱えていて、あなたのSCRIPT_DEBUGwp-config.phpfalseに設定する必要があることがわかった。これが誰かに役立つことを願っています

1
Yuri