WordPress - 访问块模式中父块的 $context

问题描述 投票:0回答:1

问题

我有一个通过 ACF 使用古腾堡块的设置。这些块之一是具有以下上下文的组块:

"providesContext": {
    "acf/groupData": "data"
}

然后我在组块模板文件中使用

<InnerBlocks />

可以嵌套在该组块中的每个块的值为:

"usesContext": ["acf/groupData"]

这非常有效,组值被传递到

$context
数组中以在内部块中使用。

但是,如果我在该组块内添加 Synced Pattern 块,上下文就会丢失,并且

acf/groupData
不是
$context
数组的一部分。

希望有人能够提供帮助,如果有一种方法可以将组上下文传递到同步模式,那就太好了。

尝试过

我环顾四周,看看是否有任何与创建模式相关的钩子,看看我是否可以通过那里传递上下文,但没有运气。

我还尝试创建一个函数来获取帖子内容,解析块并尝试从那里获取组块,但是,使用帖子内容时不会返回块 ID,仅返回块名称和属性等。

wordpress advanced-custom-fields wordpress-gutenberg acf-gutenberg
1个回答
0
投票

不幸的是,同步模式(以前称为“可重用块”)在设计上不会继承上下文,因为它们旨在跨帖子/页面和模板使用,因此它们不依赖于提供的上下文。

查看您的场景,组块在编辑器中提供了

"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)重复使用/包含在其他内容中。

可能的解决方法

我会:而不是同步模式:

  • 在 Group 块中定义一个 InnerBlocks 模板,列出所需的嵌套/子块(以及每个块的任何默认值)。
  • 注册组块的块变体(如果需要),该组块会改变
    InnerBlocks
    模板,从而无需同步模式,同时保持父子之间的上下文。
  • 对嵌套/子块使用动态块,使其
    "acf/groupData"
    能够在前端渲染(参见上面的render.php示例)。
© www.soinside.com 2019 - 2024. All rights reserved.