なぜ絶えず注意があるのですか。
JQMIGRATE:Migrateがインストールされている、バージョン1.4.0
テーマをWordPress 4.5に更新したときにコンソールのload-scripts.php
を指していますが、どうすれば削除できますか?
それはエラーではありませんが、それは私のコンソールに常に存在しています、そして私は本当にそれのポイントが何であるかわかりません。何かを更新するべきですか、それとも私のコードに何らかの変更を加えるべきですか?
たぶん私はOCDを少し持っています、しかし、通常私がサイトを調べるとき、私は私のコンソールの問題を指摘する誤りと本当の通知を見るのが好きです...
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開発のベストプラクティスとは考えられていないことに注意してください。私の意見では、移行スクリプトは開発者コンソールをきれいに保つためだけに削除するべきではありません。
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スクリプトが追加され、目的の効果が達成されます(インストールされたメッセージが表示されなくなります)。
ここでちょっとテストしてください。
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 );
}
これを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
が一括して呼び出されない場合に機能します。
同じ問題を抱えていて、あなたのSCRIPT_DEBUG
でwp-config.php
をfalse
に設定する必要があることがわかった。これが誰かに役立つことを願っています