我正在通过主题的functions.php
中的以下函数检测并加载所有自定义 gutenberg 块:
foreach (glob(__DIR__ . '/blocks/*/**.php') as $file) {
include_once($file);
}
在每个文件夹./blocks/FOLDER
中,有一个gutenberg-init.php
和一个render.php
。
wp-content/themes/my-theme
|-- ...
|-- blocks
| |-- block
| |-- gutenberg-init.php
| |-- render.php
| |-- block
| |-- gutenberg-init.php
| |-- render.php
| |-- ...
|-- ...
gutenberg-init.php
调用:
add_action('acf/init', fn() =>
acf_register_block_type([
// ... block configuration
]);
);
在 gutenberg 编辑器中,我找到了5/12个我注册过的区块。如果我注册了add_action('acf/init', fn() => var_dump("ACF initialized"))
就在目录循环之前,以及文件迭代器中的var_dump( $file )
,我看到打印了5个文件,因此首先加载,然后打印ACF initialized
,然后打印剩余的文件,这意味着钩子在我的循环完成运行之前触发。
我知道foreach
和for
循环在javascript中的不同之处,因为foreach
会在每个元素的调用堆栈上放置一个回调,而不是在继续之前执行循环代码。我从来没有在使用PHP时遇到过类似的问题,我对如何解决这个问题有点困惑。关于如何在剩余的wordpress引导逻辑继续之前完成文件循环,有什么建议吗?
1条答案
按热度按时间mwecs4sa1#
几种可能性:
1.似乎不太可能,但同样,其中一个文件可能直接调用
do_action('acf/init')