- Описание функции
- Примеры использования
- Регистрация нового типа блока
- Создание метаданных для блока
- Установка иконки для блока
- Описание блока
- Настройка категории блока
- Установка родительского блока
- Определение доступности блока внутри других блоков
- Добавление ключевых слов для поиска блока
- Установка текстового домена для перевода
- Создание альтернативных стилей блока
- Создание вариаций блока
- Определение пользовательских CSS-селекторов
- Определение поддерживаемых функций блока
- Добавление структурированных данных для предварительного просмотра блока
- Определение схем атрибутов блока
- Установка контекста использования блока
- Определение контекста, предоставляемого блоком
- Установка скриптов редактора блока
- Установка скриптов для фронтенда и редактора блока
- Установка скриптов только для фронтенда блока
- Установка стилей редактора блока
- Установка стилей для фронтенда и редактора блока
- Вопросы и ответы
- Как зарегистрировать новый тип блока?
- Как использовать метаданные из файла block.json для регистрации блока?
- Как указать имя и пространство имен для нового типа блока?
- Как указать путь к файлу block.json для регистрации блока?
- Как указать путь к папке с файлом block.json для регистрации блока?
- Как зарегистрировать новый тип блока с помощью экземпляра WP_Block_Type?
- Как указать версию API для нового типа блока?
- Как указать категорию для нового типа блока?
- Связанные элементы
Описание функции
Функция 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: представляет блок в разобранном виде и содержит информацию о его типе, атрибутах и содержимом.