迷惑な「JQMIGRATE:Migrate is…」というWordPress 4.5への更新後のコンソール


53

なぜ常に通知があるのか​​、

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

load-scripts.phpテーマをWordPress 4.5に更新したときにコンソールでポイントし、どのように削除できますか?

これはエラーではありませんが、コンソールに常に表示されており、その意味が実際にはわかりません。何かを更新する必要がありますか、コードに何らかの変更を加える必要がありますか?

OCDを少し持っているかもしれませんが、通常、サイトを検査するときに、コンソールの問題を示すエラーと実際の通知を表示するのが好きです...


非常に便利なOCDに+1します。これは、おそらくjquery移行/後方互換性スクリプトに由来します。unminified / devバージョンを使用する可能性はありますか?
マークカプルン

移行の縮小されていないバージョン?私の知る限りではない、それはいくつかのプラグインである可能性がありますが、検査時に私はそれのいずれも表示されません:\
dingo_d

1
:両方のバージョンに注意WPのdirsにしている/wp-admin/js/jquery/jquery-migrate.js/wp-admin/js/jquery/jquery-migrate.min.js
majick

回答:


50

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

WordPress 4.5のリリースで、jQueryのバージョンをv1.2.1からv1.4.0にアップグレードしたようです-コードをすばやくスキャンすると、v1.4.0が、migrateMuteオプションは、非圧縮バージョンと縮小バージョンの両方で設定されています。

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

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開発のベストプラクティスとは見なされないため、開発者コンソールをクリーンに保つためだけに移行スクリプトを削除しないでください。


基本的に、私のプラグインの1つは、古いjQueryバージョンの一部であった機能に依存していますか?その機能が何であるかを知る方法はありますか?または、移行スクリプトをミュートするだけで安全ですか?
dingo_d

1
プラグインのいずれかが古い機能に依存しているかどうかはわかりません。WordPressには、しばらくの間更新されていないプラグインがインストールに含まれている場合に備えて、移行スクリプトが安全なデフォルトとして含まれています。私の場合は、サイトのローカルインストールで移行スクリプトを削除し、コンソールなどにエラーがないことを確認して、すべてが期待どおりに動作することを確認します
Andy

これに反対することをお勧めします。この後方互換性には理由があります。これは、WordPressで廃止予定の関数ファイルを削除するのと同等のjQueryです。現在のセットアップが完全に互換性があるかどうかを確認するすべての問題に行くことは、セットアップの変更やプラグインの追加を考慮に入れず、作成する潜在的な問題を考えると、コンソールログメッセージを削除する完全に疑わしい利点とバランスが取れていません。
majick

1
@majickスクリプトの削除が良いアイデアかどうかを議論することはこの回答の範囲を超えています。これは特にコンソールでメッセージを削除する方法の問題に対処します。FWIW、スクリプトを削除することも悪い考えだと思います。私の答えはOPの質問に完全に答えているので、下票は求められていないと思います。
アンディ

1
申し訳ありませんが、頻繁にダウン票を投じることはありませんが、これは良い考えではなく、開発のベストプラクティスの反対であるという警告がないため、ここで必要だと感じました(警告を追加して、ダウン票を削除します)。 jquery migrate自体を削除する方法ではなく、コンソールメッセージのみを削除する方法を尋ねていると考えています。誰かがWordPressの更新nagメッセージを削除する方法を尋ねた場合、「WordPressをアンインストールするだけ」とは答えません。
majick

11

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

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

// 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スクリプトが追加され、目的の効果が得られます(インストールされたメッセージが防止されます)。


1
アイデアについては+1ですが、サイトの場合は、すべてのスクリプトが最新バージョンと互換性があることを確認し、移行
プログラム

はい。ただし、最新のjQueryと互換性のないテーマ/プラグインのインストールは考慮されていないため、Migratorを慣行として削除することにまったく同意しません。パラレルとして、ここでWordPressの機能を実現していない場合や、「公式に」廃止されている場合でも、正常に機能するプラグインがたくさんあります。後方互換性は予防であり、両方の場合、そして一般的にソフトウェアに関して言えば、治療法よりも優れています。
majick

2
あなたは正しいですが、最新のjqueryバージョンをサポートしていないことはバグIMOです。4.5は約1か月前にRCに導入され、コードが導入されたすべての変更で動作するようにテストされていない場合、テーマ/プラグインは完全に互換性がありません。ワードプレス以外の世界では、非推奨メッセージはある時点で実際の非推奨に変わるため、できるだけ早くアップグレードする必要があるときまで、それらの処理を残したくないでしょう。移行者IMOは、永続的な機能ではなく、一時的なソリューションである必要があります。
マークカプルン

2
私はここで校長に同意しません。インターネットは急速に変化するターゲットであり、景観は常に変化しています。(たとえば、サイトのロゴ機能を4.5に変更するまでに、サイトはロゴを1つだけにするという考えから移行していました)。Oldは、非常に具体的で安定したニッチに適用する場合にのみ有効ですが、たとえばjQueryは比較的動きやすいターゲットであることがわかっています。
マークカプルン

1
テーマは孤立した製品ではありません。テーマがワードプレスやjqueryなどをパッケージ化している場合、テーマの年齢は完全に関連しているでしょう。テーマがそれをしないので、テーマが使用されているワードプレスのバージョンに対してテストされなかった場合、どのようなバグが発見されるかは十分に明確ではありません。これは、静的リンクと動的リンクのジレンマのもう1つの現れです。静的リンクの世界ではあなたの主張はほとんど本当ですが、WordPressは動的リンクで、何かが3.5で働いていたという理由だけで、それもbackcompatibleことしようとする試みで4.5で動作しますという意味ではありません
マーク・Kaplun

7

ここで少しテストします。

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

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

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

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

1
下のコードはメッセージを削除するだけですよね?つまり、移行はそのままですが、メッセージは抑制されますよね?これは、移行を完全に削除するよりも優れています
-dingo_d

1
いいえ、それは出力を行うコンソールログメッセージを生成するコードのコピーです。前半は関係なく、出力...である-それはmigrateMuteのみ、コンソールメッセージの後半のためにテストされていることを示して削除するコンソールメッセージを削除します。このコードブロックをしますが、各WP更新することを再実行する必要があります。
majick

2
研究と詳細をありがとう!多くのWPプラグインは廃止されたjQuery関数に依存しているため、JQmigrateを削除することは常に良いアイデアとは限らないため、IMOが最適なオプションです。このソリューションは、コンソール出力を少しクリーンアップするのに役立ちます!
フィリップ

1

解決:

これを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

同じ問題を抱えていた、そしてあなただけ設定する必要が出てたSCRIPT_DEBUGfalseあなたにwp-config.php。これが誰かを助けることを願っています


2
私にはうまくいきませんでした。
セルジサガン

-1

Andy WordPressで前述したように、jQuery移行スクリプトを使用して後方互換性を確保しているため、デフォルトで自動的にロードされます。

JQuery Migrateモジュールを削除して、クライアント側でのページの読み込みを高速化しながら、迷惑なJQMIGRATE通知を取り除く安全な方法を次に示します。functions.phpファイルにこのコードをコピーして貼り付けるだけで完了です。

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


詳細

静的関数を使用している理由の詳細については、こちらの記事をご覧ください
►►https : //en.guydumais.digital/disable-jquery-migrate-in-wordpress/


2
なぜなら、これはスパムの匂いが強すぎて、答えのように感じるために最小限の努力をするだけだからです。2.キャッシュ無効化を無効にするバージョンをハードコーディングします。
マーク・Kaplun

恥ずかしいのは、その素晴らしいアプローチでありadd_filter、実際にアクションを使用しているときにも使用しているからです。
pcarvalho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.