在文件迭代器加载所有文件之前调用了Wordpress钩子

xvw2m8pv  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(155)

我正在通过主题的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,然后打印剩余的文件,这意味着钩子在我的循环完成运行之前触发。
我知道foreachfor循环在javascript中的不同之处,因为foreach会在每个元素的调用堆栈上放置一个回调,而不是在继续之前执行循环代码。我从来没有在使用PHP时遇到过类似的问题,我对如何解决这个问题有点困惑。关于如何在剩余的wordpress引导逻辑继续之前完成文件循环,有什么建议吗?

mwecs4sa

mwecs4sa1#

几种可能性:

  1. ACF文档声明acf/init可以“在functions.php文件加载过程中提前触发”。如果其中一个include立即获取字段值,则可能导致您所看到的行为。
    1.似乎不太可能,但同样,其中一个文件可能直接调用do_action('acf/init')

相关问题