描述错误
在编辑与这些字段组的位置规则无关的帖子时,使用“高级自定义字段”插件创建的所有字段组均显示为空白的可见元框。
上面的图像在编辑Hello World帖子时将所有字段组显示为空的元框。
了解错误
其原因是由于古腾堡(Gutenberg)在初始化期间删除/修改了元框的可见性。 请参阅下面的示例代码来复制问题。
这是有关此问题的一些背景知识,以及为什么这是在5.0发布之前要修复的重要问题...
ACF将所有字段组注册为元框,然后使用JS根据其位置规则隐藏/显示它们。 这允许在编辑帖子属性(例如category,post_format,post_parent)时动态更新metabox。 这种方法使ACF可以在拖动元框时遵循自定义的元框顺序和位置设置。
激活古腾堡(或WordPress 5.0 RC2)后,所有元框都显示为可见。 我相信,古腾堡(Gutenberg)中的一些JS代码正在设置元框的可见性,而无需检查元框是否已被自定义JS隐藏。
为什么需要解决此问题
有很多原因需要解决,但我将尝试通过以下几种方法来赢得您的青睐:
重现
这是一些示例代码和一些附件来演示该问题:
<?php
// Register a metabox.
add_action('add_meta_boxes', 'test_add_meta_boxes', 10, 2);
function test_add_meta_boxes( $post_type, $post ) {
add_meta_box( 'test-metabox', 'Test Metabox', 'test_render_meta_box', $post_type, 'normal', 'high' );
}
// Render metabox HTML.
function test_render_meta_box() {
?>
<script type="text/javascript">
(function($) {
$('#test-metabox').hide();
$('#test-metabox .inside').html('This should be hidden.');
})(jQuery);
</script>
<?php
}
?>
预期行为
通过自定义JS隐藏的元框应保持隐藏状态。
其他背景
发生这种情况是因为MetaBoxVisibility
将style.display
为''
:
一个简单的解决方法是将其更新为仅在需要隐藏元框时才更新DOM:
componentDidMount() {
if ( ! this.props.isVisible ) {
this.updateDOM();
}
}
但是,用户仍然可以通过打开_Options_并在该meta框的复选框旁边切换来再次显示该meta框。
@elliotcondon :您能够使用remove_meta_box()
取消注册元框,而不是使用CSS隐藏它吗? 这样,将从编辑器和_Options_模态中删除元框。
@noisysocks感谢您的答复和信息。
我很乐意研究一种用于动态更新元框的替代解决方案,但是,不可能在周四的WP5.0版本之前向所有用户推出更新。
是否可以在不删除其“显示”样式的情况下“装入”元框?
这将使Gutenberg能够按预期继承metabox HTML。
是否可以在不删除其“显示”样式的情况下“装入”元框?
是的,这基本上就是我上面建议的更改。 不过,由于Gutenberg需要将style.display
为''
或'none'
这样用户才能通过_Options_模态启用和禁用元框,因此只能缓解该错误。
这就说得通了。 这样容易进入5.0版本吗?
我很遗憾地说,在发行周期中为5.0修复该问题为时已晚,这不是一个阻碍性的问题。 我已将其添加到5.0.1里程碑,目标是在12月6日发布5.0之后的两个星期。
作为一种解决方法,您可以考虑使用不会修改style.display
的方法来隐藏元素,例如
- $('#test-metabox').hide();
+ $('#test-metabox').addClass( 'hidden' );
您是否不知道这将影响到数百万个站点正在使用ACF和ACF Pro? 在5.0版本之前不解决此问题是荒谬的,令人难以置信的是,您只愿意发布破坏这种流行插件的代码,这令人沮丧。 我敢打赌,如果这个问题影响了Jetpack或其他一些Automattic插件,它将在数分钟内得到修复,并神奇地添加到5.0版本中。
*这仅适用于ACF
我管理200多个利用ACF的站点所有者,另外31个使用ACF Pro。 这个发布周期一直是我遇到过的最令人失望的事情。 将这个问题拖延两个星期或更长时间可耻。
我敢打赌,如果这个问题影响了Jetpack或其他一些Automattic插件,它将在数分钟内得到修复,并神奇地添加到5.0版本中。
阿门
我认为启用经典编辑器可以解决此问题吗? 不确定其中仍然包含多少古腾堡代码
@elliotcondon这是回归,还是一直以这种方式起作用?
这很可能是一个月前由https://github.com/WordPress/gutenberg/pull/11084引入的回归
请继续关注话题。 这里不是讨论5.0发布过程的地方。
https://github.com/WordPress/gutenberg/pull/11084中的“超级hacky方法”是什么意思?
使用“非hacky方法”会更好,因为WordPress 5.0现在“准备就绪”了吗? 还是不是?
@noisysocks是否在合并之前像@youknowriad建议的那样,成功地对ACF预先测试了请求请求?
不好意思,我把电线交叉在那里。 六周前, https://github.com/WordPress/gutenberg/pull/10676在4.1中引入了这种回归
大家好。 关于此问题,我们开始看到很多支持通知。 请根据您的计划更新此GitHub票证,以解决该问题。
使用$( '#test-metabox' ).addClass( 'hidden' )
或wp.data.dispatch( 'core/edit-post' ).removeEditorPanel( 'meta-box-test-metabox' )
隐藏元框仍然是首选的解决方法。
展望未来,我们建议在此类情况下使用removeEditorPanel()
或remove_meta_box()
。
听起来我们需要发布更新以从头开始解决此问题。
可惜的是,在发行版之前无法在WP 5.0中添加这么小的修复程序。
这直接影响每个ACF用户更新到5.0。
听起来我们需要发布更新以从头开始解决此问题。
可惜的是,在发行版之前无法在WP 5.0中添加这么小的修复程序。
这直接影响每个ACF用户更新到5.0。
WordPress确实与Gutenberg搞砸了。 他们说他们听用户的话,但显然不听。 没有人想要这种怪物。
非常感谢@elliotcondon修复了WP的固定问题。
是的,很遗憾没有发现此错误并在5.0代码冻结时及时修复。
_请_让我们继续关注话题。 GitHub是我们的工作场所。 重要的是,我们在此处保持话题的友好性和对话性,以使现有的贡献者能够尽其所能,并欢迎新的贡献者加入该项目。
@noisysocks ...我很抱歉。 我将尝试咬我的舌头。 但是,您应该知道所做的工作对数百万WP用户产生了负面影响,只是将其放在该插件的开发人员上以解决您的错误。 应该是发布修补程序的WP,而不是ACF。
是的,很遗憾没有发现此错误并在5.0代码冻结时及时修复。
也许如果这个版本不是那么匆忙,那么它就会被发现。 也许如果古腾堡(Gutenberg)并没有不断地向后兼容,就不需要首先找到它。
Elliot让ACF正常工作的次数只有在几周后被古腾堡(Gutenberg)打破时,才是荒谬的! 知道它会破坏数百万个站点的事实而发布它的事实同样荒谬。
正如@noisysocks所提到的,此存储库是我们工作的地方:就像您不会漫步到某人的办公室并bad口他们或他们的工作一样,在这里这样做同样是不可接受的。
我知道遇到一个错误很令人沮丧,尤其是当它影响到您在生产中管理的网站时。 但是,这绝不是在bug报告中泄气的借口,该bug报告专门用于修复该bug。
同时,我在该线程中隐藏了主题外的注释。 请继续对该主题进行讨论。
不过,更新5.0后会有此问题
运气好的话?
@pento ...就像自动审查审查用户反馈一样。 如果您不喜欢这些评论,请更好地整理您的内容。 我认为您要等待2个星期来修复这样的主要错误是很有趣的。 我没有办法等那么久。 哎呀,我不会把这种垃圾放在首位。
最有用的评论
您是否不知道这将影响到数百万个站点正在使用ACF和ACF Pro? 在5.0版本之前不解决此问题是荒谬的,令人难以置信的是,您只愿意发布破坏这种流行插件的代码,这令人沮丧。 我敢打赌,如果这个问题影响了Jetpack或其他一些Automattic插件,它将在数分钟内得到修复,并神奇地添加到5.0版本中。
*这仅适用于ACF