register_block_type()
Реєструє новий тип блоку редактора блоків (Гутенберг).
Для коректної реєстрації блоку поле $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()
- $render_callback (callable)
Приклади
#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');
}#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() 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 );
}