为什么会不断发出通知,

JQMIGRATE:安装了Migrate版本1.4.0

,当我将主题更新为WordPress 4.5时,它指向控制台中的load-scripts.php,并且
这不是一个错误,但它始终存在于控制台中,我真的不知道它的意义是什么。我应该更新某些内容还是对我的代码进行某些更改?
也许我有一些OCD,但是通常当我检查站点时,我喜欢看到错误和真正的提示,指出控制台中的问题。 ..
EDIT
WordPress 5.5删除了jQuery Migrate脚本,作为将jQuery更新到5.6中最新版本的准备步骤。因此通知应该消失了。
https://make.wordpress.org/core/2020/06/29/updating-jquery-version-shipped-with-wordpress/

评论

+1非常有用的强迫症。这可能来自jquery迁移/向后兼容性脚本。您有机会使用它的未缩小/开发版本吗?

未缩小版本的迁移?不,据我所知,可能是某些插件,但是经检查,我看不到任何插件:\

请注意,这两个版本均在WP目录中:/wp-admin/js/jquery/jquery-migrate.js和/wp-admin/js/jquery/jquery-migrate.min.js

#1 楼

WordPress使用jQuery迁移脚本来确保与您使用的任何插件或主题的向后兼容性,这些插件或主题使用的功能已从较新版本的jQuery中删除。
随着WordPress 4.5的发布,他们似乎已经升级了jQuery Migration的版本。从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开发的最佳做法,在我看来,不应仅出于保持开发者控制台整洁的目的而删除迁移脚本。

评论


因此,基本上我的一个插件依赖于旧jQuery版本中的一部分功能?有没有办法找出该功能是什么?还是我可以安全地将迁移脚本静音?

– dingo_d
16年4月24日在12:24

我不能肯定地说您的任何插件是否都依赖于旧功能,如果您的安装中有一段时间未更新任何插件,WordPress只是将迁移脚本作为安全的默认值包含在内。如果是我,我将在站点的本地安装上删除迁移脚本,然后检查一切是否仍按预期进行,确保控制台等没有错误。

–安迪
16年4月24日在12:29

@majick讨论删除脚本是否是一个好主意,超出了此答案的范围,它专门解决了如何在控制台中删除消息的问题。 FWIW,我认为删除脚本也是一个坏主意。我认为毫无必要,因为我的回答很好地回答了OP的问题。

–安迪
16-4-25在8:49



抱歉,我不经常投票,但是没有必要警告说这可能不是一个好主意,这与开发中的最佳实践相反(添加警告,我将删除投票)。相信问题在询问如何仅删除控制台消息,而不是如何删除jquery本身。如果有人问如何在WordPress中删除更新the消息,您将不会回答“仅卸载WordPress”。

– majick
16年4月25日在9:10

没有问题,downvote被删除。对我自己而言,如果确实让我感到烦恼,那么我宁愿在每次WP升级时仅在Migration js文件中注释掉该消息,而不是将其完全删除。仅仅因为javascript很气质,有时候一件事不合时宜,几乎所有东西都坏了..如果专门避免这种情况的话,那是太大的风险,没有收益。

– majick
16-4-25在9:27



#2 楼

您可以在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脚本,从而达到了预期的效果(防止已安装的消息。)

评论


+1,但如果是您的网站,最好确保所有脚本都与最新版本兼容并删除迁移器;)

–马克·卡普伦
16-4-25在9:11



是的,但是我完全不同意删除迁移器,因为它没有考虑安装可能与最新jQuery不兼容的主题/插件。作为一个并行工具,有许多插件仍然可以正常工作,即使它们可能尚未在此处意识到WordPress功能或已“正式”弃用。总体而言,向后兼容性是预防性的问题,而且比治疗方法要好。

– majick
16年4月25日在9:18

您是对的,但是IMO错误不支持最新的jquery版本。 4.5大约一个月前进入了RC,如果未经过测试代码对其所有更改的支持,那么主题/插件并不是真正兼容的。在外部,wordpress弃用消息有时会变成实际弃用,并且您不希望在必须尽快升级的情况下处理它们。 IMO迁移器应该是一个临时解决方案,而不是永久性功能。

–马克·卡普伦
16-4-25在9:29



我在这里不同意校长,互联网是一个快速发展的目标,而且格局一直在变化。 (例如,在将网站徽标功能升级到4.5所需的时间之前,网站已经从仅拥有一个徽标的想法转移到了现在)。仅当应用于非常具体且稳定的细分市场时,Old才是好的,但是例如jQuery被认为是相对移动的目标。

–马克·卡普伦
16年4月25日在9:46

主题不是孤立的产品。如果一个主题包装了wordpress和jquery等,那么该主题的年龄将是完全相关的。由于没有主题,如果没有针对使用的wordpress版本对主题进行测试,那么还不清楚会发现哪种错误。这只是静态与动态链接困境的另一种体现。在静态链接世界中,您的主张大体上是正确的,但wordpress是动态链接,仅因为某些东西已经与3.5一起工作并不意味着它即使在向后兼容的情况下也可以与4.5一起工作。

–马克·卡普伦
16年4月25日在10:54

#3 楼

我在这里进行了一些测试。

我偷看了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:迁移与日志记录活动版本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 );
}


评论


所以底部的代码只是删除了消息,对吗?我的意思是,迁移仍然存在,但消息被抑制了,对吗?这比绝对删除迁移要好

– dingo_d
16年4月25日在9:47

不,这是产生控制台日志消息并输出的代码的副本。它显示仅对控制台消息的后半部分测试了migrateMute-不管是否输出了前半部分...删除此代码块将删除控制台消息,但是您需要重做每个WP更新。

– majick
16年4月25日在9:56

感谢您的研究和细节! IMO是最佳选择,因为删除JQmigrate并不总是一个好主意,因为许多WP插件都依赖不推荐使用的jQuery函数。该解决方案有助于清理控制台输出!

– Philipp
17年4月28日在17:39

#4 楼

解决方案:

将其添加到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 );


当使用标准钩子调用jquery-migrate时(它输出<link rel=stylesheet....>)而不是通过load-scripts.php起作用带有大量q4312079q(例如在管理控制台中)。

评论


这对我来说很好。谢谢!

–迪迪尔
1月31日22:21

#5 楼

遇到相同的问题,发现您只需要在SCRIPT_DEBUG中将false设置为wp-config.php即可。希望这对某人有帮助

评论


那对我没有用。

–塞尔吉·萨根(Serj Sagan)
18-10-4在8:19

#6 楼


正如Andy先前所提到的,WordPress使用jQuery迁移脚本来确保向后兼容,这就是为什么默认情况下会自动加载它的原因。

这是删除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 /

评论


拒绝投票的原因是:1.这闻起来太多了垃圾邮件,只是付出了最小的努力才觉得自己像个答案。 2.硬编码使缓存无效化的版本。

–马克·卡普伦
18-4-26在16:42



很遗憾,因为这是一种不错的方法,即使您实际上在执行操作时也使用add_filter。

– pcarvalho
18-09-20在21:13