我正在编写一个Wordpress插件来创建自定义的古腾堡块。我正在使用一个叫做Carbon Fields的作曲家程序包。但是,当我尝试使用该软件包时,出现错误:
致命错误:未捕获的错误:在第10行的/my-path/my-plugin/my-plugin.php中找不到类'Carbon_Fields \ Block'。
奇怪的是,我可以毫无问题地使用Container和Field类。
注意
我刚刚包含了基本的文件结构和代码,以便您可以专注于重要的事情。
文件结构
代码
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() ) );
}
}
答案 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
} );
}