在我的团队开发的 WordPress 主题中,我们最近遇到了一个问题,无论怎样,当尝试退出帖子/页面/自定义帖子类型时,WordPress 都会抛出警告:“离开站点?更改你所做的可能无法保存。”即使您单击更新然后立即尝试退出页面,它也会抛出该警告。
我不知道是什么原因造成的。这种行为是在我几天前推出重大更新时开始的。我尝试完全删除该更新,通过 git 恢复所有更改,并且该行为仍然存在。我什至切换到几个月没有工作的主题分支,并且这种行为仍然存在。
我尝试过 Chrome、Firefox、Edge,但该行为仍然存在。我已经让同事在他们的计算机上尝试过,并且该行为仍然存在。
这让我发疯!有没有人有任何建议,甚至从哪里开始寻找?这只是最近的 WordPress 问题,与我们的主题无关吗?
此问题是由 WordPress 5.6.1 版本中引入的 bug 引起的。
作为解决方法,您可以暂时将 WordPress 从 5.6.1 降级到 5.6。一种方法是使用 WP Downgrade 插件。
或者,您可以忽略该问题几天/几周,直到他们修复它。
将其添加到functions.php对我有用:
// WordPress 5.6.1: Window Unload Error Final Fix
add_action('admin_print_footer_scripts', 'wp_561_window_unload_error_final_fix');
function wp_561_window_unload_error_final_fix(){
?>
<script>
jQuery(document).ready(function($){
// Check screen
if(typeof window.wp.autosave === 'undefined')
return;
// Data Hack
var initialCompareData = {
post_title: $( '#title' ).val() || '',
content: $( '#content' ).val() || '',
excerpt: $( '#excerpt' ).val() || ''
};
var initialCompareString = window.wp.autosave.getCompareString(initialCompareData);
// Fixed postChanged()
window.wp.autosave.server.postChanged = function(){
var changed = false;
// If there are TinyMCE instances, loop through them.
if ( window.tinymce ) {
window.tinymce.each( [ 'content', 'excerpt' ], function( field ) {
var editor = window.tinymce.get( field );
if ( ( editor && editor.isDirty() ) || ( $( '#' + field ).val() || '' ) !== initialCompareData[ field ] ) {
changed = true;
return false;
}
} );
if ( ( $( '#title' ).val() || '' ) !== initialCompareData.post_title ) {
changed = true;
}
return changed;
}
return window.wp.autosave.getCompareString() !== initialCompareString;
}
});
</script>
<?php
}
有关此问题的更多信息此处
该问题在 6.6.1 中仍然存在