Функция register_block_bindings_source()
позволяет зарегистрировать новый источник данных для привязки (binding) к атрибутам блоков. Это особенно полезно при работе с динамическими данными, так как источники позволяют блокам получать значения из различных источников, таких как пользовательские данные или API.
register_block_bindings_source( string $source_name, array $source_properties ): WP_Block_Bindings_Source|false
Функция register_block_bindings_source()
регистрирует новый источник привязки для блоков. Для этого задается уникальное имя и функция обратного вызова, которая отвечает за извлечение значения из источника. Блоки, поддерживающие API привязок, могут использовать зарегистрированные источники для получения данных.
Параметры:
- $source_name (string) — Имя источника, включая префикс пространства имен, например,
my-plugin/custom-source
. - $source_properties (array) — Массив свойств, содержащий метаданные и функцию обратного вызова для получения значения.
Возвращает объект WP_Block_Bindings_Source
при успешной регистрации или false
при ошибке.
Параметры $source_properties
- label (string) — Название источника, отображаемое в интерфейсе администратора.
- get_value_callback (callable) — Функция обратного вызова, которая извлекает значение для привязки. Принимает параметры:
$source_args
(array) — Аргументы, переданные в источник через метаданные блока.$block_instance
(WP_Block) — Экземпляр блока.$attribute_name
(string) — Имя атрибута блока.
- uses_context
Пример 1: Регистрация Источника с Пользовательскими Данными
Допустим, у нас есть блок, который должен получать данные из пользовательской таблицы в базе данных.
function custom_source_callback( $source_args, $block_instance, $attribute_name ) {
$user_id = $source_args['user_id'] ?? 0;
$user_meta_value = get_user_meta( $user_id, $attribute_name, true );
return $user_meta_value ?: "Значение не найдено";
}
function register_custom_block_binding_source() {
register_block_bindings_source( 'my-plugin/user-data', array(
'label' => __( 'User Data Source', 'my-plugin' ),
'get_value_callback' => 'custom_source_callback',
) );
}
add_action( 'init', 'register_custom_block_binding_source' );
Здесь создается источник
my-plugin/user-data
, который извлекает данные из метаполей пользователя. Источник будет использоваться в блоках для подстановки динамических данных из профилей пользователей.
Пример 2: Источник для Получения Данных с Внешнего API
Этот пример демонстрирует, как создать источник для извлечения данных из внешнего API и привязать их к блоку.
function fetch_external_api_data( $source_args, $block_instance, $attribute_name ) {
$api_key = 'your-api-key';
$endpoint = 'https://api.example.com/data';
$response = wp_remote_get( "{$endpoint}?key={$api_key}" );
if ( is_wp_error( $response ) ) {
return "Ошибка API";
}
$data = json_decode( wp_remote_retrieve_body( $response ), true );
return $data[$attribute_name] ?? "Данные отсутствуют";
}
function register_api_block_binding_source() {
register_block_bindings_source( 'my-plugin/api-data-source', array(
'label' => __( 'API Data Source', 'my-plugin' ),
'get_value_callback' => 'fetch_external_api_data',
) );
}
add_action( 'init', 'register_api_block_binding_source' );
В этом примере
my-plugin/api-data-source
используется для получения данных с внешнего API и привязки их к блоку. Это позволяет автоматически обновлять данные в блоке на основе внешнего источника.
Применение Источника в Блоке
После регистрации источника, можно использовать его в блоке, указав его в метаданных. Ниже показан пример использования источника в блоке с именем my-plugin/custom-block
:
<!-- wp:my-plugin/custom-block {
"metadata": {
"bindings": {
"content": {
"source": "my-plugin/user-data",
"args": {
"user_id": 123
}
}
}
}
} -->
<p>Данные будут заменены значением из источника.</p>
<!-- /wp:my-plugin/custom-block -->
В этом примере контент блока будет заменен значением, полученным от источника
my-plugin/user-data
. Аргументы в"args"
передают данные в функцию обратного вызова, чтобы извлечь соответствующее значение.
Заключение
Функция register_block_bindings_source()
— мощный инструмент для привязки блоков к динамическим данным. Она позволяет гибко управлять содержимым блоков, привязывая их к внешним источникам данных, что делает блоки более интерактивными и адаптивными.