Sage WordPress-插件命名空间:未找到

时间:2019-07-07 作者:Kenny

我最初在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插件中。

1 个回复
最合适的回答,由SO网友:johnnyg17 整理而成

您必须在根sage主题中指定composer.json 自动加载可以在其中找到类的运行时。

  "autoload": {
    "psr-4": {
      "App\\\\": "app/",
      "App\\\\Blocks\\\\": "app/Blocks/",
      "Itineris\\\\AcfGutenblocks\\\\": "../../plugins/acf-gutenblocks/src/",      
    }
  }
别忘了跑步composer dump-autoload

相关推荐

更改wp-admin/plugins.php上统计的插件数量

我已成功地使用从插件页面隐藏我的插件$wp_list_table 然而,顶部的分页仍然将插件列为“所有(3)”等。我成功地改变了$wp_list_table 的数组_pagination_args = total_items.但它仍然在页面顶部呈现插件-“全部(3)”。有什么办法可以解决这个问题吗?我找到了WP_Plugins_List_Table::prepare_items()具有全局$totals 变量,但我不确定我将如何改变这一点,在这个函数中$totals = array(); fore