Функция block_editor_rest_api_preload()
в WordPress используется для предварительной загрузки данных REST API, необходимых для работы блокового редактора. Эта функция позволяет указать пути для предварительной загрузки, что снижает количество запросов к серверу и ускоряет загрузку данных в блоковом редакторе.
block_editor_rest_api_preload( array $preload_paths, WP_Block_Editor_Context $block_editor_context )
Параметры функции
- $preload_paths (array, обязательно): Массив путей REST API, которые нужно предварительно загрузить.
- $block_editor_context (
WP_Block_Editor_Context
, обязательно): Контекст текущего редактора блоков, в котором будет использоваться функция.
Особенности
- Предварительная загрузка данных с помощью этой функции особенно полезна для оптимизации редактора при работе с большим количеством данных.
- После загрузки данных с указанными путями, функция добавляет скрипт с данными, доступными для
wp.apiFetch
, что позволяет блоковому редактору получать их без дополнительных запросов к серверу.
Пример 1: Простая предварительная загрузка данных REST API
Допустим, вы хотите заранее загрузить данные о настройках сайта и мета-полях постов в блоковом редакторе. Для этого можно задать пути к соответствующим REST API и передать их функции.
// Определение путей к REST API, которые нужно предварительно загрузить
$paths_to_preload = [
'/wp/v2/settings',
'/wp/v2/posts/meta'
];
// Вызов функции предварительной загрузки данных для блокового редактора
block_editor_rest_api_preload( $paths_to_preload, $block_editor_context );
Этот код загружает данные о настройках сайта и мета-полях, делая их доступными в редакторе блоков сразу при загрузке страницы.
Пример 2: Проверка существования функции перед использованием
Чтобы избежать ошибок в старых версиях WordPress, где функция block_editor_rest_api_preload()
может отсутствовать, можно добавить проверку на существование функции.
// Проверка существования функции перед ее использованием
if (function_exists('block_editor_rest_api_preload')) {
$paths_to_preload = [
'/wp/v2/tags',
'/wp/v2/categories'
];
block_editor_rest_api_preload($paths_to_preload, $block_editor_context);
}
В этом примере данные тегов и категорий будут предварительно загружены, только если функция доступна в текущей версии WordPress.
Пример 3: Использование с фильтром block_editor_rest_api_preload_paths
Фильтр block_editor_rest_api_preload_paths
позволяет изменить массив путей, переданных в block_editor_rest_api_preload()
, чтобы гибко контролировать набор данных, подгружаемых в редактор.
// Добавление дополнительных путей через фильтр
add_filter('block_editor_rest_api_preload_paths', function ($paths, $block_editor_context) {
$paths[] = '/wp/v2/comments';
return $paths;
}, 10, 2);
С помощью этого фильтра к основному массиву путей добавляется путь /wp/v2/comments
, что позволяет предварительно загружать данные комментариев в редакторе.
Пример 4: Предварительная загрузка данных только для определенных типов записей
Можно использовать условие для проверки типа записи в контексте блока и предварительно загружать только необходимые данные, например, для записей типа product
.
// Загрузка только для определенного типа записей
$paths_to_preload = [
'/wp/v2/products',
'/wp/v2/products/meta'
];
if ($block_editor_context->post->post_type === 'product') {
block_editor_rest_api_preload($paths_to_preload, $block_editor_context);
}
В этом примере данные о продуктах предварительно загружаются только при редактировании записей типа product
, что оптимизирует загрузку редактора.
Пример 5: Создание пользовательской функции для предварительной загрузки данных
Чтобы использовать эту функцию в нескольких частях темы, можно создать обертку для block_editor_rest_api_preload()
и использовать ее по всему проекту.
// Создаем функцию для предварительной загрузки данных
function my_custom_preload_api_paths(WP_Block_Editor_Context $context) {
$preload_paths = [
'/wp/v2/media',
'/wp/v2/users'
];
block_editor_rest_api_preload($preload_paths, $context);
}
// Используем созданную функцию
add_action('enqueue_block_editor_assets', function() {
global $block_editor_context;
my_custom_preload_api_paths($block_editor_context);
});
Заключение
Функция block_editor_rest_api_preload()
обеспечивает гибкость и удобство при работе с редактором блоков WordPress, позволяя эффективно загружать необходимые данные перед началом редактирования. Это особенно полезно для тем и плагинов, работающих с большими объемами данных или требующих особых настроек в редакторе.