register_block_type()

Регистрирует тип блока. Рекомендуется зарегистрировать тип блока, используя метаданные, хранящиеся в файле block.json
Функция WordPress
INT 5.0.0
WordPress Icon
Содержание
  1. Описание функции
  2. Примеры использования
  3. Регистрация нового типа блока
  4. Создание метаданных для блока
  5. Установка иконки для блока
  6. Описание блока
  7. Настройка категории блока
  8. Установка родительского блока
  9. Определение доступности блока внутри других блоков
  10. Добавление ключевых слов для поиска блока
  11. Установка текстового домена для перевода
  12. Создание альтернативных стилей блока
  13. Создание вариаций блока
  14. Определение пользовательских CSS-селекторов
  15. Определение поддерживаемых функций блока
  16. Добавление структурированных данных для предварительного просмотра блока
  17. Определение схем атрибутов блока
  18. Установка контекста использования блока
  19. Определение контекста, предоставляемого блоком
  20. Установка скриптов редактора блока
  21. Установка скриптов для фронтенда и редактора блока
  22. Установка скриптов только для фронтенда блока
  23. Установка стилей редактора блока
  24. Установка стилей для фронтенда и редактора блока
  25. Вопросы и ответы
  26. Как зарегистрировать новый тип блока?
  27. Как использовать метаданные из файла block.json для регистрации блока?
  28. Как указать имя и пространство имен для нового типа блока?
  29. Как указать путь к файлу block.json для регистрации блока?
  30. Как указать путь к папке с файлом block.json для регистрации блока?
  31. Как зарегистрировать новый тип блока с помощью экземпляра WP_Block_Type?
  32. Как указать версию API для нового типа блока?
  33. Как указать категорию для нового типа блока?
  34. Связанные элементы

Описание функции

Функция register_block_type() регистрирует новый тип блока в WordPress. Рекомендуется регистрировать тип блока с использованием метаданных, хранящихся в файле block.json.

Функция позволяет создавать собственные блоки для использования в редакторе блоков WordPress. Блоки представляют собой модули, которые могут содержать различные элементы, такие как текст, изображения, видео, формы и другие компоненты. Регистрация типа блока позволяет определить его свойства, такие как название, категория, иконка, описание и другие параметры.

Использование

register_block_type( string|WP_Block_Type $block_type, array $args = array() ): WP_Block_Type|false

Функция register_block_type() принимает два параметра:

  • $block_type (обязательный) — имя типа блока, включая пространство имен, или путь к файлу block.json с метаданными блока, или путь к папке, где находится файл block.json, или полный экземпляр WP_Block_Type. Если передан экземпляр WP_Block_Type, параметр $args будет проигнорирован.
  • $args (необязательный) — массив аргументов для типа блока. Принимает любое публичное свойство WP_Block_Type. См. WP_Block_Type::__construct() для получения информации о поддерживаемых аргументах.
  • $block_type (строка|WP_Block_Type) — Обязательно. Имя типа блока, включая пространство имен, или путь к файлу block.json с метаданными блока, или путь к папке, где находится файл block.json, или полный экземпляр WP_Block_Type. Если передан экземпляр WP_Block_Type, параметр $args будет проигнорирован.
  • $args (массив) — Необязательно. Массив аргументов для типа блока. Принимает любое публичное свойство WP_Block_Type. См. WP_Block_Type::__construct() для получения информации о поддерживаемых аргументах.

Функция возвращает зарегистрированный тип блока в случае успеха или false в случае ошибки.

<?php
/**
 * Регистрация типа блока "my-plugin/my-block".
 *
 * @param string $block_type Имя типа блока, включая пространство имен.
 * @param array  $args       Массив аргументов для типа блока.
 * @return WP_Block_Type|false Зарегистрированный тип блока в случае успеха или false в случае ошибки.
 */
register_block_type( 'my-plugin/my-block', array(
    'title'       => 'Мой блок',
    'category'    => 'common',
    'icon'        => 'dashicons-admin-page',
    'description' => 'Описание моего блока.',
    'keywords'    => array( 'мой', 'блок', 'wordpress' ),
) );

Примеры использования

Регистрация нового типа блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы регистрируем новый тип блока с именем ‘my-plugin/my-block’. Мы указываем API-версию 2, название блока ‘My Block’ и категорию ‘common’. Также мы указываем функцию обратного вызова ‘my_plugin_render_block’, которая будет использоваться для отображения блока.

Создание метаданных для блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'attributes' => array(
            'text' => array(
                'type' => 'string',
                'default' => 'Hello, World!',
            ),
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы добавляем метаданные для блока, включая атрибут ‘text’ с типом ‘string’ и значением по умолчанию ‘Hello, World!’. Этот атрибут будет доступен в функции обратного вызова для отображения содержимого блока.

Установка иконки для блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'icon' => 'admin-site',
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы устанавливаем иконку блока с помощью значения ‘admin-site’. Это значение соответствует иконке сайта в административной панели WordPress.

Описание блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'description' => 'This is a custom block created by My Plugin.',
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы добавляем описание блока с помощью значения ‘This is a custom block created by My Plugin.’. Это описание будет отображаться в интерфейсе редактирования блоков.

Настройка категории блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы устанавливаем категорию блока в значение ‘common’. Эта категория используется для классификации блоков в интерфейсе поиска.

Установка родительского блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'parent' => array( 'core/paragraph', 'core/image' ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы устанавливаем родительский блок для нашего блока. Это означает, что наш блок будет доступен только при вложении в блоки ‘core/paragraph’ и ‘core/image’.

Определение доступности блока внутри других блоков


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'ancestor' => array( 'core/group', 'core/columns' ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы определяем, что наш блок будет доступен только внутри блоков ‘core/group’ и ‘core/columns’ в любой позиции в древовидной структуре блока предка.

Добавление ключевых слов для поиска блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'keywords' => array( 'my', 'block', 'custom' ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы добавляем ключевые слова ‘my’, ‘block’ и ‘custom’ для нашего блока. Эти ключевые слова будут использоваться для поиска блока в интерфейсе.

Установка текстового домена для перевода


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'textdomain' => 'my-plugin',
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы устанавливаем текстовый домен ‘my-plugin’ для перевода нашего блока. Этот текстовый домен будет использоваться для локализации строк блока.

Создание альтернативных стилей блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'styles' => array(
            array(
                'name' => 'default',
                'label' => 'Default',
                'isDefault' => true,
            ),
            array(
                'name' => 'wide',
                'label' => 'Wide',
            ),
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы создаем альтернативные стили для нашего блока. У нас есть стиль ‘default’ с меткой ‘Default’, который является стилем по умолчанию, и стиль ‘wide’ с меткой ‘Wide’.

Создание вариаций блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'variations' => array(
            array(
                'name' => 'variation-1',
                'label' => 'Variation 1',
            ),
            array(
                'name' => 'variation-2',
                'label' => 'Variation 2',
            ),
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы создаем вариации для нашего блока. У нас есть вариация ‘variation-1’ с меткой ‘Variation 1’ и вариация ‘variation-2’ с меткой ‘Variation 2’.

Определение пользовательских CSS-селекторов


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'selectors' => array(
            'p' => 'p.my-block',
            'h1' => 'h1.my-block',
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы определяем пользовательские CSS-селекторы для нашего блока. У нас есть селектор ‘p’ со значением ‘p.my-block’ и селектор ‘h1’ со значением ‘h1.my-block’.

Определение поддерживаемых функций блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'supports' => array(
            'align' => array( 'wide', 'full' ),
            'anchor' => true,
            'html' => false,
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы определяем поддерживаемые функции для нашего блока. У нас есть поддержка выравнивания с значениями ‘wide’ и ‘full’, поддержка якоря и отключение редактирования HTML-кода.

Добавление структурированных данных для предварительного просмотра блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'example' => array(
            'attributes' => array(
                'text' => 'Hello, World!',
            ),
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы добавляем структурированные данные для предварительного просмотра нашего блока. У нас есть атрибут ‘text’ со значением ‘Hello, World!’.

Определение схем атрибутов блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'attributes' => array(
            'text' => array(
                'type' => 'string',
                'default' => 'Hello, World!',
            ),
            'color' => array(
                'type' => 'string',
                'default' => 'red',
                'enum' => array( 'red', 'blue', 'green' ),
            ),
        ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы определяем схемы атрибутов для нашего блока. У нас есть атрибут ‘text’ с типом ‘string’ и значением по умолчанию ‘Hello, World!’, и атрибут ‘color’ с типом ‘string’, значением по умолчанию ‘red’ и возможными значениями ‘red’, ‘blue’ и ‘green’.

Установка контекста использования блока


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'uses_context' => array( 'query' ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы устанавливаем контекст использования для нашего блока. У нас есть контекст ‘query’, который указывает, что наш блок использует контекст запроса.

Определение контекста, предоставляемого блоком


function my_plugin_register_block_type() {
    register_block_type( 'my-plugin/my-block', array(
        'api_version' => 2,
        'title' => 'My Block',
        'category' => 'common',
        'render_callback' => 'my_plugin_render_block',
        'provides_context' => array( 'query' ),
    ) );
}
add_action( 'init', 'my_plugin_register_block_type' );

В этом примере мы определяем контекст, предоставляемый нашим блоком. У нас есть контекст ‘query’, который указывает, что наш блок предоставляет контекст запроса.

Установка скриптов редактора блока


function my_plugin_enqueue_block_editor_assets() {
    wp_enqueue_script(
        'my-plugin-block-editor',
        plugins_url( 'block-editor.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element' ),
        filemtime( plugin_dir_path( __FILE__ ) . 'block-editor.js' )
    );
}
add_action( 'enqueue_block_editor_assets', 'my_plugin_enqueue_block_editor_assets' );

В этом примере мы устанавливаем скрипты редактора для нашего блока. Мы используем функцию wp_enqueue_script() для загрузки скрипта ‘my-plugin-block-editor.js’, который зависит от скриптов ‘wp-blocks’ и ‘wp-element’.

Установка скриптов для фронтенда и редактора блока


function my_plugin_enqueue_block_assets() {
    wp_enqueue_script(
        'my-plugin-block',
        plugins_url( 'block.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element' ),
        filemtime( plugin_dir_path( __FILE__ ) . 'block.js' )
    );
}
add_action( 'enqueue_block_assets', 'my_plugin_enqueue_block_assets' );

В этом примере мы устанавливаем скрипты для фронтенда и редактора нашего блока. Мы используем функцию wp_enqueue_script() для загрузки скрипта ‘my-plugin-block.js’, который зависит от скриптов ‘wp-blocks’ и ‘wp-element’.

Установка скриптов только для фронтенда блока


function my_plugin_enqueue_block_assets() {
    if ( ! is_admin() ) {
        wp_enqueue_script(
            'my-plugin-block',
            plugins_url( 'block.js', __FILE__ ),
            array( 'wp-blocks', 'wp-element' ),
            filemtime( plugin_dir_path( __FILE__ ) . 'block.js' )
        );
    }
}
add_action( 'enqueue_block_assets', 'my_plugin_enqueue_block_assets' );

В этом примере мы устанавливаем скрипты только для фронтенда нашего блока. Мы используем функцию wp_enqueue_script() внутри условия, чтобы убедиться, что скрипты загружаются только на фронтенде, а не в административной панели.

Установка стилей редактора блока


function my_plugin_enqueue_block_editor_assets() {
    wp_enqueue_style(
        'my-plugin-block-editor',
        plugins_url( 'block-editor.css', __FILE__ ),
        array( 'wp-edit-blocks' ),
        filemtime( plugin_dir_path( __FILE__ ) . 'block-editor.css' )
    );
}
add_action( 'enqueue_block_editor_assets', 'my_plugin_enqueue_block_editor_assets' );

В этом примере мы устанавливаем стили редактора для нашего блока. Мы используем функцию wp_enqueue_style() для загрузки стиля ‘my-plugin-block-editor.css’, который зависит от стиля ‘wp-edit-blocks’.

Установка стилей для фронтенда и редактора блока


function my_plugin_enqueue_block_assets() {
    wp_enqueue_style(
        'my-plugin-block',
        plugins_url( 'block.css', __FILE__ ),
        array( 'wp-edit-blocks' ),
        filemtime( plugin_dir_path( __FILE__ ) . 'block.css' )
    );
}
add_action( 'enqueue_block_assets', 'my_plugin_enqueue_block_assets' );

В этом примере мы устанавливаем стили для фронтенда и редактора нашего блока. Мы используем функцию wp_enqueue_style() для загрузки стиля ‘my-plugin-block.css’, который зависит от стиля ‘wp-edit-blocks’.

Вопросы и ответы

Как зарегистрировать новый тип блока?

Для регистрации нового типа блока в WordPress используется функция register_block_type(). Она принимает два параметра: $block_type и $args.

Параметр $block_type может быть строкой с именем типа блока вместе с пространством имен, путем к файлу block.json с метаданными блока, путем к папке, содержащей файл block.json, или экземпляром класса WP_Block_Type. Если передан экземпляр класса, параметр $args будет проигнорирован.

Параметр $args является необязательным и представляет собой массив аргументов для типа блока. Он может содержать любые публичные свойства класса WP_Block_Type. Дополнительные аргументы можно узнать из документации к классу WP_Block_Type.

Функция register_block_type() возвращает зарегистрированный тип блока в случае успеха или false в случае ошибки.

Как использовать метаданные из файла block.json для регистрации блока?

Рекомендуется использовать метаданные, хранящиеся в файле block.json, для регистрации нового типа блока. Для этого в качестве значения параметра $block_type нужно передать путь к файлу block.json или путь к папке, содержащей файл block.json. В этом случае параметр $args будет проигнорирован.

Как указать имя и пространство имен для нового типа блока?

Имя и пространство имен нового типа блока можно указать в параметре $block_type при регистрации. Например, если тип блока называется «my-plugin/my-block», то значение параметра будет 'my-plugin/my-block'.

Как указать путь к файлу block.json для регистрации блока?

Для указания пути к файлу block.json при регистрации блока нужно передать путь к файлу или путь к папке, содержащей файл block.json, в параметре $block_type. Например, если файл block.json находится в папке «my-plugin/blocks/my-block», то значение параметра будет 'my-plugin/blocks/my-block'.

Примеры кода:


// Регистрация нового типа блока с использованием метаданных из файла block.json
register_block_type( 'my-plugin/my-block' );
// Регистрация нового типа блока с указанием пути к файлу block.json
register_block_type( 'my-plugin/blocks/my-block' );

Как указать путь к папке с файлом block.json для регистрации блока?

Для регистрации блока с помощью файла block.json, необходимо указать путь к папке, где находится этот файл. Это можно сделать следующим образом:


register_block_type( '/path/to/block' );

Как зарегистрировать новый тип блока с помощью экземпляра WP_Block_Type?

Для регистрации нового типа блока с помощью экземпляра WP_Block_Type, необходимо передать этот экземпляр в функцию register_block_type(). Например:


$block_type = new WP_Block_Type( 'my-plugin/my-block' );
register_block_type( $block_type );

Как указать версию API для нового типа блока?

Для указания версии API для нового типа блока, необходимо использовать аргумент ‘api_version’ при регистрации блока. Например:


$args = array(
    'api_version' => 2,
);
register_block_type( 'my-plugin/my-block', $args );

Как указать категорию для нового типа блока?

Для указания категории для нового типа блока, необходимо использовать аргумент ‘category’ при регистрации блока. Например:


$args = array(
    'category' => 'common',
);
register_block_type( 'my-plugin/my-block', $args );

Функция register_block_type() позволяет зарегистрировать новый тип блока в WordPress. Она предоставляет гибкую возможность для создания и настройки блоков, используя метаданные, хранящиеся в файле block.json. Также функция позволяет указать путь к папке с файлом block.json, зарегистрировать блок с помощью экземпляра WP_Block_Type, указать версию API и категорию для нового типа блока. При успешной регистрации функция возвращает объект WP_Block_Type, а в случае ошибки возвращает false.

Связанные элементы

  • Хук init: вызывается при инициализации WordPress и используется для регистрации блоков.
  • Хук block_categories: используется для добавления новых категорий блоков в панель инструментов редактора.
  • Хук render_block: вызывается при рендеринге блока и позволяет изменить его вывод.
  • Хук allowed_block_types: используется для ограничения доступных типов блоков для определенных пользователей или ролей.
  • Хук block_editor_settings: используется для изменения настроек редактора блоков.
  • Класс WP_Block_Type: представляет тип блока и содержит информацию о нем, такую как название, категория, описание и т. д.
  • Класс WP_Block_Editor_Context: представляет контекст редактора блоков и содержит информацию о текущем редактируемом посте или странице.
  • Класс WP_Block_Parser_Block: представляет блок в разобранном виде и содержит информацию о его типе, атрибутах и содержимом.
Обсуждение