register_block_type() WP 5.0.0

Реєструє новий тип блоку редактора блоків (Гутенберг).

Для коректної реєстрації блоку поле $name має бути ідентичним у php функції register_block_type( ‘alias/example’, [] ) та js функції registerBlockType( ‘alias/example’, {} )

Хуків немає.

Повертає

WP_Block_Type|false. Об’єкт зареєстрованого блоку у разі успіху чи false у разі помилки.

Використання

register_block_type($name, $args);
$name
(рядок/WP_Block_Type) (обов’язковий)
Назва типу блоку, включаючи простір імен або повний екземпляр
WP_Block_Type . Параметр
$args не потрібен, коли вказано екземпляр
WP_Block_Type (він буде проігнорований).
$args
(масив)

Масив аргументів блоку. Можуть бути визначені будь-які аргументи, проте за умовчанням підтримується лише render_callback .

  • $render_callback (callable)
    Функція зворотного дзвінка, яка використовується для відображення контенту блоку. Приймає параметри $attributes та $content

За замовчуванням: array()

Приклади

1

#1 Зареєструємо новий тип блоку без додаткових параметрів

add_action( 'init', 'gutenberg_block_register_block');
// Реєструємо новий тип боку
function gutenberg_block_register_block() {
	register_block_type( 'gutenberg-block/example', [] );
}

add_action( 'enqueue_block_editor_assets', 'gutenberg_block_editor_scripts' );
// Реєструємо основний скрипт для блоку
function gutenberg_block_editor_scripts() {
	wp_register_script(
		'example',
		plugins_url( 'build/index.js', __FILE__ ),
		['wp-blocks']
	);

	wp_enqueue_script( 'example');
}
0

#2 Зареєструємо новий тип блоку з додатковими параметрами

Приклад показує, як реєструвати блок у контексті класу. Блок буде виводити записи.

New Gutenberg_Block_Example(); // ініціалізація

class Gutenberg_Block_Example {

	public function __construct() {
		add_action( 'init', [ $this, 'gutenberg_block_register_block' ] );
		add_action( 'enqueue_block_editor_assets', [ $this, 'gutenberg_block_editor_scripts' ] );
	}

	public function gutenberg_block_register_block() {
		register_block_type( 'gutenberg-block/example', [
			'attributes' => [
				'postsPerPage' => [
					'type' => 'number',
					'default' => 3,
				],
				'order' => [
					'type' => 'string',
					'default' => 'desc',
				],
			],
			'render_callback' => [ $this, 'gutenberg_block_render_callback' ]
		]);
	}

	public function gutenberg_block_editor_scripts() {
		wp_register_script(
			'example',
			plugins_url( 'build/index.js', __FILE__ ),
			['wp-blocks']
		);

		wp_enqueue_script( 'example');

	}

	public function gutenberg_block_render_callback( $attributes, $content ) {

		$args = [
			'posts_per_page' => $attributes['postsPerPage'],
			'post_status' => 'publish',
			'order' => $attributes['order'],
		];

		$posts = get_posts($args);

		$html = '<div>';

		if ($posts) {
			$html .= '<ul>';

			foreach ($posts as $item) {
				$html .= '<li><a href="' . get_the_permalink( $item->ID ) . '">' . $item->post_title . '</a></li>';
			}

			$html .= '</ul>';
		} else {
			$html .= '<h3>' . __( 'No posts!', 'gutenberg-blocks') . '</h3>';
		}

		$html .= '</div>';

		return $html;

	}

}

список змін

З версії 5.0.0Введено.
З версії 5.8.0Перший параметр зараз прийняв шлях до блоку.json файлу .

Код register_block_type() WP 6.0.2

function register_block_type( $block_type, $args = array() ) {
	if ( is_string( $block_type ) && file_exists( $block_type ) ) {
		return register_block_type_from_metadata( $block_type, $args );
	}

	return WP_Block_Type_Registry::get_instance()->register( $block_type, $args );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *