問題描述
任何人都可以解釋為什麼會有不斷的通知
JQMIGRATE: Migrate is installed, version 1.4.0
當我將主題更新為 WordPress 4.5 時,我的控制檯中指向 load-scripts.php,它如何被刪除?
這不是一個錯誤,但它總是存在於我的控制檯中,我真的不明白它的意義在哪裡?我應該更新一些東西,對我的程式碼進行一些修改嗎?
也許我有一點 ocd,但通常當我檢查的網站,我喜歡看錯誤和真實的通知,指出我的控制檯中的一個問題…
最佳解決方案
WordPress 使用 jQuery 遷移指令碼確保您可能正在使用哪些使用從較新版本的 jQuery 中刪除功能的任何外掛或主題的向後相容性。
隨著 WordPress 4.5 的釋出,它似乎已經升級了從 v1.2.1 到 v1.4.0 的 jQuery 遷移的版本 – 快速掃描透過程式碼顯示 v1.4.0 日誌指令碼被載入,無論 migrateMute 選項是否設定並且在未壓縮和最小化的版本中。
刪除通知的唯一方法是確保您的所有外掛/主題程式碼不依賴任何舊的 jQuery 功能,然後刪除遷移指令碼。有一個 plugin 在這裡做,但這是一個很簡單的方法,可以放在你的主題的功能檔案或類似的:
add_action( 'wp_default_scripts', function( $scripts ) {
if ( ! empty( $scripts->registered['jquery'] ) ) {
$scripts->registered['jquery']->deps = array_diff( $scripts->registered['jquery']->deps, array( 'jquery-migrate' ) );
}
} );
請注意,這不是 WordPress 開發的最佳做法,在我看來,遷移指令碼不應該僅僅是為了保持開發者控制檯的清潔。
次佳解決方案
您可以在 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();}
結果是新增到前端和後端的一行 HTML 指令碼實現了所需的效果 (防止已安裝的訊息) 。
第三種解決方案
這裡只是一點點測試。
我偷看了 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 is installed with logging active, version 1.4.0
至:
JQMIGRATE: Migrate is installed, version 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 );
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。