找不到PHP的作曲家包类

时间:2020-05-02 12:21:33

标签: php wordpress oop composer-php carbon-fields

我正在编写一个Wordpress插件来创建自定义的古腾堡块。我正在使用一个叫做Carbon Fields的作曲家程序包。但是,当我尝试使用该软件包时,出现错误:

致命错误:未捕获的错误:在第10行的/my-path/my-plugin/my-plugin.php中找不到类'Carbon_Fields \ Block'。

奇怪的是,我可以毫无问题地使用Container和Field类。

注意

我刚刚包含了基本的文件结构和代码,以便您可以专注于重要的事情。

文件结构

  • 我的插件
    • 供应商
      • htmlburger
        • 核心
          • Block.php
          • Carbon_Fields.php
          • Container.php
          • Field.php
    • my-plugin.php

代码

my-plugin.php

add_action( 'after_setup_theme', 'carbon_fields_init' );
function carbon_fields_init() {
        require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php';
        \Carbon_Fields\Carbon_Fields::boot();
}

use \Carbon_Fields\Block;
use \Carbon_Fields\Filed;

Block::make( __( 'Hero Image' ) )
    ->add_fields( array(
        Field::make( 'text', 'heading', __( 'Block Heading' ) ),
    ) )
    ->set_render_callback( function ( $fields, $attributes, $inner_blocks ) {
        ?>

        <div class="block">
            <div class="block__heading">
                <h1><?php echo esc_html( $fields['heading'] ); ?></h1>
            </div><!-- /.block__heading -->

        <?php
    } );

Block.php

namespace Carbon_Fields;

class Block extends Container {
    public static function make() {
        return call_user_func_array( array( 'parent', 'make' ), array_merge( array( 'block' ), func_get_args() ) );
    }
}

1 个答案:

答案 0 :(得分:0)

最后,我从葡萄牙语教程(https://www.youtube.com/watch?v=bKY-7_wR2n0)中得到了答案。我必须将块创建包装到一个函数中,并将该函数设置为carbon_fields_register_fields操作钩子的回调。

use Carbon_Fields\Field;
use Carbon_Fields\Block;

add_action( 'after_setup_theme', 'crb_load' );
function crb_load() {
    require_once( 'vendor/autoload.php' );
    \Carbon_Fields\Carbon_Fields::boot();
}

add_action( 'carbon_fields_register_fields', 'crb_add_test_block' );
function crb_add_test_block() {
    Block::make( __( 'My Shiny Gutenberg Block' ) )
        ->add_fields( array(
            Field::make( 'text', 'heading', __( 'Block Heading' ) ),
            Field::make( 'rich_text', 'content', __( 'Block Content' ) ),
        ) )
        ->set_render_callback( function ( $fields, $attributes, $inner_blocks ) {
            ?>

            <div class="block">
                <div class="block__heading">
                    <h1><?php echo esc_html( $fields['heading'] ); ?></h1>
                </div><!-- /.block__heading -->

                <div class="block__content">
                    <?php echo apply_filters( 'the_content', $fields['content'] ); ?>
                    <a href="">Reload</a>
                </div><!-- /.block__content -->
            </div><!-- /.block -->

            <?php
        } );
}