Хук allowed_block_types_all
в WordPress позволяет контролировать, какие блоки могут использоваться в редакторе для различных типов контента. С его помощью можно включить или отключить блоки для определённых типов записей, страниц или других условий, предоставляя гибкость и кастомизацию редактора блоков.
apply_filters( ‘allowed_block_types_all’, bool|string[] $allowed_block_types, WP_Block_Editor_Context $block_editor_context )
Параметры
$allowed_block_types
(bool|string[]): Массив с ярлыками разрешённых блоков (например,'core/paragraph'
,'core/image'
), либо логическое значение:true
— разрешить все блоки (по умолчанию).false
— запретить все блоки.
$block_editor_context
(WP_Block_Editor_Context): Контекст текущего редактора блоков, включающий информацию о посте, типе контента и редакторе.
Применение
Чтобы использовать хук allowed_block_types_all
, добавьте следующий код в файл вашей темы или плагина:
add_filter( 'allowed_block_types_all', 'wp_custom_allowed_block_types', 10, 2 );
/**
* Фильтр для разрешения определённых блоков.
*
* @param bool|string[] $allowed_block_types Массив разрешённых блоков или логическое значение.
* @param WP_Block_Editor_Context $block_editor_context Текущий контекст редактора блоков.
*
* @return bool|string[]
*/
function wp_custom_allowed_block_types( $allowed_block_types, $block_editor_context ) {
// Логика фильтрации блоков
return $allowed_block_types;
}
Пример 1: Разрешение только базовых блоков для всех записей
В этом примере мы ограничим доступные блоки базовыми, такими как абзац, заголовок и изображение, для всех типов контента.
add_filter( 'allowed_block_types_all', function( $allowed_block_types, $block_editor_context ) {
return array(
'core/paragraph',
'core/heading',
'core/image',
);
}, 10, 2 );
Пример 2: Разные блоки для разных типов записей
Можно настроить список блоков в зависимости от типа поста, используя объект $block_editor_context
.
add_filter( 'allowed_block_types_all', function( $allowed_block_types, $block_editor_context ) {
if ( isset( $block_editor_context->post ) ) {
$post_type = $block_editor_context->post->post_type;
if ( 'product' === $post_type ) {
return array( 'core/paragraph', 'core/image', 'core/gallery' );
} elseif ( 'news' === $post_type ) {
return array( 'core/paragraph', 'core/heading', 'core/quote', 'core/list' );
}
}
return $allowed_block_types;
}, 10, 2 );
Пример 3: Полное отключение блоков в редакторе виджетов
Иногда нужно запретить блоки в определённых редакторах, например, в редакторе виджетов.
add_filter( 'allowed_block_types_all', function( $allowed_block_types, $block_editor_context ) {
if ( 'core/widgets' === $block_editor_context->name ) {
return false; // Запрещаем все блоки в редакторе виджетов.
}
return $allowed_block_types;
}, 10, 2 );
Пример 4: Исключение отдельных блоков из разрешённых
С помощью объекта WP_Block_Type_Registry
можно создать массив всех блоков и удалить из него ненужные блоки.
add_filter( 'allowed_block_types_all', function( $allowed_block_types, $block_editor_context ) {
// Блоки, которые нужно исключить.
$exclude_blocks = array( 'core/calendar', 'core/rss', 'core/embed' );
// Получаем все зарегистрированные блоки, если массив блоков ещё не задан.
if ( ! is_array( $allowed_block_types ) || empty( $allowed_block_types ) ) {
$registered_blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
$allowed_block_types = array_keys( $registered_blocks );
}
// Удаляем исключённые блоки.
$allowed_block_types = array_filter( $allowed_block_types, function( $block ) use ( $exclude_blocks ) {
return ! in_array( $block, $exclude_blocks, true );
} );
return array_values( $allowed_block_types );
}, 10, 2 );
Заключение
Хук allowed_block_types_all
предоставляет гибкость в управлении доступными блоками в редакторе WordPress. Этот хук полезен для настройки редактора под потребности сайта, облегчения процесса создания контента и поддержания удобного интерфейса для пользователей.