我有一个通过 ACF 使用古腾堡块的设置。这些块之一是具有以下上下文的组块:
"providesContext": {
"acf/groupData": "data"
}
然后我在组块模板文件中使用
<InnerBlocks />
。
可以嵌套在该组块中的每个块的值为:
"usesContext": ["acf/groupData"]
这非常有效,组值被传递到
$context
数组中以在内部块中使用。
但是,如果我在该组块内添加 Synced Pattern 块,上下文就会丢失,并且
acf/groupData
不是 $context
数组的一部分。
希望有人能够提供帮助,如果有一种方法可以将组上下文传递到同步模式,那就太好了。
我环顾四周,看看是否有任何与创建模式相关的钩子,看看我是否可以通过那里传递上下文,但没有运气。
我还尝试创建一个函数来获取帖子内容,解析块并尝试从那里获取组块,但是,使用帖子内容时不会返回块 ID,仅返回块名称和属性等。
不幸的是,同步模式(以前称为“可重用块”)在设计上不会继承上下文,因为它们旨在跨帖子/页面和模板使用,因此它们不依赖于提供的上下文。
查看您的场景,组块在编辑器中提供了
"acf/groupData"
到 InnerBlocks
的上下文,尽管无法保存块上下文,但它可以工作。 InnerBlocks
中的每个嵌套块都会消耗 "acf/groupData"
,如果它们是动态渲染的,则它们可以使用前端提供的上下文,例如:
渲染.php
<?php
/**
* @see https://github.com/WordPress/gutenberg/blob/trunk/docs/reference-guides/block-api/block-metadata.md#render
* $attributes (array): The block attributes.
* $content (string): The block default content.
* $block (WP_Block): The block instance.
*
* Example render callback for child/nested block contained within InnerBlocks
* that receives context from Parent
*/
?>
<div <?php echo get_block_wrapper_attributes(); ?>>
<?php echo $block->context['acf/groupData']; // prints "data" ?>
</div>
如果您随后将其保存为同步模式,则会触发警告
Undefined array key “acf/groupData”
,因为同步模式的父块上下文不存在,因为同步模式实际上在数据库中保存为自定义帖子类型(wp_block)重复使用/包含在其他内容中。
可能的解决方法
我会:而不是同步模式:
InnerBlocks
模板,从而无需同步模式,同时保持父子之间的上下文。"acf/groupData"
能够在前端渲染(参见上面的render.php示例)。