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 楼
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
评论
+1非常有用的强迫症。这可能来自jquery迁移/向后兼容性脚本。您有机会使用它的未缩小/开发版本吗?未缩小版本的迁移?不,据我所知,可能是某些插件,但是经检查,我看不到任何插件:\
请注意,这两个版本均在WP目录中:/wp-admin/js/jquery/jquery-migrate.js和/wp-admin/js/jquery/jquery-migrate.min.js