allowed_block_types_all
в WordPress используется для управления разрешёнными типами блоков в редакторе Gutenberg. С её помощью можно настроить, какие блоки будут доступны для пользователей при редактировании постов и страниц.
Введение
allowed_block_types_all
была введена в WordPress 5.8 и позволяет разработчикам фильтровать блоки, доступные в редакторе Gutenberg. Она является более гибкой заменой allowed_block_types
, предоставляя возможность учитывать контекст и пользователя при определении доступных блоков.
Использование allowed_block_types_all
Для использования этой опции необходимо добавить фильтр в файл functions.php
вашей темы или в плагин. Синтаксис функции выглядит следующим образом:
add_filter('allowed_block_types_all', 'your_function_name', 10, 2);
function your_function_name($allowed_block_types, $block_editor_context) {
// Ваша логика
return $allowed_block_types;
}
- $allowed_block_types: Массив разрешённых типов блоков или
true
(если разрешены все блоки). - $block_editor_context: Объект контекста редактора блоков, содержащий информацию о текущем пользователе, типе поста и другие параметры.
Примеры
Разрешение только определённых блоков
Этот пример показывает, как разрешить только определённые блоки (например, параграф и заголовок) во всём редакторе.
add_filter('allowed_block_types_all', 'my_custom_allowed_blocks', 10, 2);
function my_custom_allowed_blocks($allowed_block_types, $block_editor_context) {
return [
'core/paragraph',
'core/heading'
];
}
Ограничение блоков для конкретной роли пользователя
Этот пример ограничивает доступные блоки в зависимости от роли пользователя. Например, пользователи с ролью editor
смогут использовать все блоки, а пользователи с ролью author
— только параграфы и заголовки.
add_filter('allowed_block_types_all', 'restrict_blocks_by_user_role', 10, 2);
function restrict_blocks_by_user_role($allowed_block_types, $block_editor_context) {
if (!is_admin()) {
$user = wp_get_current_user();
if (in_array('editor', (array) $user->roles)) {
return true; // Разрешить все блоки
} elseif (in_array('author', (array) $user->roles)) {
return [
'core/paragraph',
'core/heading'
];
}
}
return $allowed_block_types;
}
Ограничение блоков для определённых типов постов
Этот пример ограничивает доступные блоки в зависимости от типа поста. Например, на страницах (page
) разрешены только параграфы и заголовки, а в постах (post
) — все блоки.
add_filter('allowed_block_types_all', 'restrict_blocks_by_post_type', 10, 2);
function restrict_blocks_by_post_type($allowed_block_types, $block_editor_context) {
if ($block_editor_context->post) {
if ($block_editor_context->post->post_type === 'page') {
return [
'core/paragraph',
'core/heading'
];
} elseif ($block_editor_context->post->post_type === 'post') {
return true; // Разрешить все блоки
}
}
return $allowed_block_types;
}
Исключение ненужных блоков
Если у вас много блоков, проще указать те, которые нужно исключить. Этот пример показывает, как программно получить весь список блоков и исключить из них ненужные.
add_filter('allowed_block_types_all', 'disable_gutenberg_blocks', 30, 2);
function disable_gutenberg_blocks($allowed_blocks, $block_editor_context) {
$disable_blocks = [
'core/calendar',
'core/comment-author-name',
'core/comment-content',
'core/comment-date',
'core/comment-edit-link',
'core/comment-reply-link',
'core/comment-template',
'core/comments',
'core/comments-pagination',
'core/comments-pagination-next',
'core/comments-pagination-numbers',
'core/comments-pagination-previous',
'core/comments-title',
'core/embed',
'core/post-author-biography',
'core/post-comments',
'core/post-comments-form',
'core/rss',
'core/social-link',
'core/social-links'
];
// Получить все зарегистрированные блоки, если $allowed_blocks не установлен
if (!is_array($allowed_blocks) || empty($allowed_blocks)) {
$registered_blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
$allowed_blocks = array_keys($registered_blocks);
}
foreach ($allowed_blocks as $index => $block_id) {
if (in_array($block_id, $disable_blocks, true)) {
unset($allowed_blocks[$index]);
}
}
return array_values($allowed_blocks); // вернуть массив
}
Дополнительные ресурсы
- Документация WordPress по фильтру allowed_block_types_all
- Руководство по созданию кастомных блоков для редактора Gutenberg
Заключение
allowed_block_types_all
предоставляет мощные возможности для настройки редактора блоков Gutenberg в WordPress. С её помощью вы можете точно контролировать, какие блоки будут доступны пользователям, учитывая их роли, типы постов и другие параметры. Это позволяет сделать работу с контентом более гибкой и адаптированной под конкретные нужды вашего проекта.