Gutenberg: ACF元框始终可见

创建于 2018-12-04  ·  24评论  ·  资料来源: WordPress/gutenberg

描述错误
在编辑与这些字段组的位置规则无关的帖子时,使用“高级自定义字段”插件创建的所有字段组均显示为空白的可见元框。

screen shot 2018-12-04 at 1 41 20 pm

上面的图像在编辑Hello World帖子时将所有字段组显示为空的元框。

了解错误
其原因是由于古腾堡(Gutenberg)在初始化期间删除/修改了元框的可见性。 请参阅下面的示例代码来复制问题。

这是有关此问题的一些背景知识,以及为什么这是在5.0发布之前要修复的重要问题...

ACF将所有字段组注册为元框,然后使用JS根据其位置规则隐藏/显示它们。 这允许在编辑帖子属性(例如category,post_format,post_parent)时动态更新metabox。 这种方法使ACF可以在拖动元框时遵循自定义的元框顺序和位置设置。

激活古腾堡(或WordPress 5.0 RC2)后,所有元框都显示为可见。 我相信,古腾堡(Gutenberg)中的一些JS代码正在设置元框的可见性,而无需检查元框是否已被自定义JS隐藏。

为什么需要解决此问题
有很多原因需要解决,但我将尝试通过以下几种方法来赢得您的青睐:

  1. 用户体验。 任何安装了ACF的用户都将在激活Gutenberg /更新到5.0的最初几分钟内遇到此问题。 这给拥有定制网站的用户带来了负面的用户体验。 用户会怀疑“还有什么坏处”吗?
  2. 采用。 不幸的是,这个问题严重影响了古腾堡。 仅当古腾堡(Gutenberg)处于活动状态时,该问题才可见,并最终导致安装了ACF的开发人员/用户不满意。

重现
这是一些示例代码和一些附件来演示该问题:

<?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
}

?>

screen shot 2018-12-04 at 1 24 57 pm

预期行为
通过自定义JS隐藏的元框应保持隐藏状态。

其他背景

  • 所有版本的Gutenberg或WP 5.0中均存在此问题
[Feature] Meta Boxes [Status] In Progress [Type] Bug

最有用的评论

您是否不知道这将影响到数百万个站点正在使用ACF和ACF Pro? 在5.0版本之前不解决此问题是荒谬的,令人难以置信的是,您只愿意发布破坏这种流行插件的代码,这令人沮丧。 我敢打赌,如果这个问题影响了Jetpack或其他一些Automattic插件,它将在数分钟内得到修复,并神奇地添加到5.0版本中。

screenshot_992
*这仅适用于ACF

所有24条评论

发生这种情况是因为MetaBoxVisibilitystyle.display''

https://github.com/WordPress/gutenberg/blob/69b55c70443762c1d302e982a5f91196ff0892f4/packages/edit-post/src/components/meta-boxes/meta-box-visibility.js#L8 -L10

一个简单的解决方法是将其更新为仅在需要隐藏元框时才更新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版本中。

screenshot_992
*这仅适用于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票证,以解决该问题。

12628解决了该问题,将在约2周内作为WordPress 5.0.1的一部分提供。

使用$( '#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。

12628将在WordPress 5.0.1中发布,它将在大约2周内发布。 如果您想帮助确保它已完全解决,我建议您测试一下PR,看看它是否可以为您解决问题,特别是对于更复杂的ACF配置。

同时,我在该线程中隐藏了主题外的注释。 请继续对该主题进行讨论。

不过,更新5.0后会有此问题

运气好的话?

@pento ...就像自动审查审查用户​​反馈一样。 如果您不喜欢这些评论,请更好地整理您的内容。 我认为您要等待2个星期来修复这样的主要错误是很有趣的。 我没有办法等那么久。 哎呀,我不会把这种垃圾放在首位。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

BE-Webdesign picture BE-Webdesign  ·  3评论

maddisondesigns picture maddisondesigns  ·  3评论

hedgefield picture hedgefield  ·  3评论

wpalchemist picture wpalchemist  ·  3评论

franz-josef-kaiser picture franz-josef-kaiser  ·  3评论