advanced-custom-fields - 如果块是嵌套的(递归),如何通过 blockName 查找古腾堡块
问题描述
我需要从 ACF Gutenberg 块中获取一些数据,但它嵌套在嵌套块中,所以
<?php
$blocks = parse_blocks( $pid->post_content );
foreach ( $blocks as $block ) {
if ( $block['blockName'] === 'acf/your-block-name' ) {
//do something
}
}
不管用。
解决方案
您需要创建一个递归函数。代码将如下所示:
<?php
$blocks = parse_blocks($pid->post_content);
foreach ($blocks as $block) {
$myAcfBlock = getMyAcfBlock($block);
if($myAcfBlock){
//do something
}
}
function getMyAcfBlock($blockObject)
{
if ($blockObject['blockName'] === 'acf/your-block-name') {
return $blockObject;
}
if (!empty($blockObject['innerBlocks'])) {
foreach ($blockObject['innerBlocks'] as $innerBlock) {
$innerBlockObject = getLandigFormBlock($innerBlock);
if ($innerBlockObject) {
return $innerBlockObject;
}
}
}
return false;
}
推荐阅读
- flutter - 银色应用栏折叠时如何以编程方式更改状态栏图标亮度?
- python - 在 choropleth 地图中显示国家 - UnicodeDecodeError: 'charmap' codec can't decode byte 0x88
- html - 我的图像没有切换到移动格式。我的代码在某处有问题吗?
- java - Android native 和 Trusted Web Activity(TWA) 之间的通信
- php - 从菜单或按钮运行特定的 php 文件
- android - 如何使用 gradle 和 cmake 在 Android Studio 项目中禁用 Execute-only Memory?
- html - 用角度做一个普通的旧表单提交
- spring - 我们可以在 doWithRetry 函数之外调用 JobLauncher.run 进行春季重试吗?
- python - Django - 如何在 RichTextField - CKEditor 中限制用户的最小字数?
- google-bigquery - 在 BigQuery 中联合许多具有不同架构的表