我最初在Sage论坛上发布here.
我试图让一个插件正常工作,但事实并非如此,我觉得这是一个非常普遍的命名空间问题,与实际的插件无关,所以我觉得我可以在这里找到成功。
插件(及其代码/repo)位于:https://github.com/ItinerisLtd/acf-gutenblocks
有什么办法可以解决这个错误吗?
Fatal error: Uncaught Error: Class \'Itineris\\AcfGutenblocks\\Plugin\' not found in /app/public/wp-content/plugins/acf-gutenblocks/acf-gutenblocks.php:32
Stack trace:
#0 /app/public/wp-includes/class-wp-hook.php(286): Itineris\\AcfGutenblocks\\{closure}(\'\')
#1 /app/public/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(\'\', Array)
#2 /app/public/wp-includes/plugin.php(465): WP_Hook->do_action(Array)
#3 /app/public/wp-content/plugins/advanced-custom-fields-pro/acf.php(334): do_action(\'acf/init\')
#4 /app/public/wp-includes/class-wp-hook.php(286): ACF->init(\'\')
#5 /app/public/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(NULL, Array)
#6 /app/public/wp-includes/plugin.php(465): WP_Hook->do_action(Array)
#7 /app/public/wp-settings.php(525): do_action(\'init\')
#8 /app/public/wp-config.php(76): require_once(\'/app/public/wp-...\')
#9 /app/public/wp-load.php(37): require_once(\'/app/public/wp-...\')
#10 /app/public/wp-blog-header.php(13): require_once(\'/app/public/wp-...\')
#11 /app/public/index.php(17): require(\'/app in /app/public/wp-content/plugins/acf-gutenblocks/acf-gutenblocks.php on line 32
我将以下代码放入
setup.php
:
add_filter(\'acf_gutenblocks/blocks\', function (array $blocks): array {
$new_blocks = [
Testimonial::class,
];
return array_merge($blocks, $new_blocks);
});
如果我删除上面的代码,我的应用程序就会正常工作。
我的文件结构,其中app
居住在wp-content/themes/[themename]/app
:
app
-- Blocks
-- -- Testimonial
-- -- -- views
-- -- -- -- frontend.php
-- -- -- Testimonial.php
-- setup.php
在我的设置中。php我有以下代码:
<小时>Link to Gist with my current code here(setup.php, Testimonial.php, Frontend.php)
你也会注意到我把
protected function registerFields(): array {}
进入的底部
Testimonial.php
, 我希望这是一个正常的地方。
对于安装名称空间,我尝试了不同的变体:use Blocks\\Testimonial\\Testimonial;
use app\\blocks\\testimonial\\testimonial;
(还带有小写文件名)
Edit 到目前为止,我最好的想法是安装了插件(composer require itinerisltd/acf-gutenblocks
) 到目录sitename/app/public/wp-content/plugins/
也许Sage主题中的文件没有选择名称空间,因为它在主要的WordPress插件中。
最合适的回答,由SO网友:johnnyg17 整理而成
您必须在根sage主题中指定composer.json
自动加载可以在其中找到类的运行时。
"autoload": {
"psr-4": {
"App\\\\": "app/",
"App\\\\Blocks\\\\": "app/Blocks/",
"Itineris\\\\AcfGutenblocks\\\\": "../../plugins/acf-gutenblocks/src/",
}
}
别忘了跑步
composer dump-autoload