恼人的“JQMIGRATE:Migrate is...”在更新到WordPress 4.5之后在控制台中

时间:2016-04-24 作者:dingo_d

为什么总是有通知,

JQMIGRATE:已安装迁移,版本1.4.0

指的是load-scripts.php 在我的控制台中,当我将主题更新到WordPress 4.5时,如何删除它?

这不是一个错误,但它总是出现在我的控制台中,我真的不明白这有什么意义。我应该更新一些东西,还是对代码进行一些更改?

也许我有点强迫症,但通常当我检查网站时,我喜欢看到错误和真正的通知,指出我控制台中的问题。。。

编辑WordPress 5.5删除了jQuery迁移脚本,作为将jQuery更新到5.6中最新版本的准备步骤。所以通知应该消失了。

https://make.wordpress.org/core/2020/06/29/updating-jquery-version-shipped-with-wordpress/

6 个回复
最合适的回答,由SO网友:Andy 整理而成

WordPress使用jQuery迁移脚本来确保您可能正在使用的任何插件或主题的向后兼容性,这些插件或主题使用从较新版本的jQuery中删除的功能。

随着WordPress 4.5的发布,他们似乎已经升级了jQuery迁移版本v1.2.1v1.4.0 - 快速扫描代码可以发现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, [\'jquery-migrate\']);
    }
});
请注意,这不是WordPress开发的最佳实践,在我看来,迁移脚本不应该仅仅为了保持开发人员控制台的干净而删除。

SO网友:majick

您可以在中将日志消息文本更改为空白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脚本,以达到所需的效果(防止安装消息)

SO网友:birgire

这里只是一个小测试。

我偷看了一下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:安装迁移时日志记录处于活动状态,版本1.4.0

收件人:

JQMIGRATE:已安装迁移,版本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 );
}

SO网友:T.Todua

解决方案:

将其添加到函数中。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 );
jquery-migrate 用标准挂钩调用(输出<link rel=stylesheet....>) 而不是与load-scripts.php 批量(如在管理仪表板中)。

SO网友:Yuri

有同样的问题,发现你只需要设置SCRIPT_DEBUGfalse 在您的wp-config.php. 希望这对某人有帮助

SO网友:Guy Dumais Digital

正如安迪之前提到的WordPress uses the jQuery migrate script to ensure backwards compatibility 这就是默认情况下自动加载的原因。这里有一种安全的方法,可以删除JQuery迁移模块,从而消除恼人的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/