web-dev-qa-db-ja.com

Sage WordPress-プラグイン名前空間:見つかりません

私は最初にセージフォーラム here に投稿しました。

プラグインを機能させようとしていますが、機能していません。これは非常に一般的なNamespace問題であり、実際のプラグインではないように感じます。ここで成功を見つけてください。

プラグイン(およびコード/レポ)は次のとおりです: 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);
});

上記のコードを削除すると、アプリケーションは正常に動作します。

appwp-content/themes/[themename]/appにある私のファイル構造:

app
-- Blocks
-- -- Testimonial
-- -- -- views
-- -- -- -- frontend.php
-- -- -- Testimonial.php
-- setup.php 

私のsetup.phpには次のコードがあります:


ここにmy currentコードを含むGistへのリンク(setup.php、Testimonial.php、Frontend.php)


また、protected function registerFields(): array {}Testimonial.phpの下部に配置していることにも気づくでしょう。

セットアップ名前空間について、さまざまなバリエーションを試しました:use Blocks\Testimonial\Testimonial;use app\blocks\testimonial\testimonial;(小文字のファイル名も使用)

編集これまでに得た最良のアイデアは、プラグイン(composer require itinerisltd/acf-gutenblocks)をディレクトリsitename/app/public/wp-content/plugins/にインストールし、おそらくSage内のファイルにインストールしたことですテーマは名前空間を取得していません。メインのWordPressプラグインに含まれているためです。

1
Kenny

ルートのセージテーマcomposer.jsonで、オートロードがクラスを検索できるランタイムを指定する必要があります。

  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "App\\Blocks\\": "app/Blocks/",
      "Itineris\\AcfGutenblocks\\": "../../plugins/acf-gutenblocks/src/",      
    }
  }

composer dump-autoloadを実行することを忘れないでください

1
johnnyg17