allowed_block_types_all
Позволяет удалить (оставить только разрешенные) блоки для всех типов редакторов блоков.
При использовании этого фильтра
- Блоки зарегистрированные через JS, но не указанные тут как разрешенные, также будут отключены (удалены).
- Любые паттерны блоков (block patterns), составленные из отключенных блоков, также будут отключены (удалены).
Для получения списка всех имеющихся блоков используем метод WP_Block_Type_Registry::get_all_registered().
Читайте также: Как отключить определенные блоки в WordPress (англ.)
Использование
add_filter( 'allowed_block_types_all', 'wp_kama_allowed_block_types_all_filter', 10, 2 );
/**
* Function for `allowed_block_types_all` filter-hook.
*
* @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all.
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
*
* @return bool|string[]
*/
function wp_kama_allowed_block_types_all_filter( $allowed_block_types, $block_editor_context ){
// filter...
return $allowed_block_types;
}
- $allowed_block_types(true|false|string[])
Массив ярлыков блоков. Или булевое значение:
true- включить все блоки.false- отключить все блоки.
По умолчанию: true (разрешены все блоки)
- $block_editor_context(WP_Block_Editor_Context)
Текущий контекст редактора блоков.
$block_editor_context->nameможет быть:core/edit-post– Редакторcore/edit-site– Редактор сайтаcore/widgets– Редактор виджетовcore/customize-widgets– Редактор виджетов в настраиваемом интерфейсе
Примеры
#1 Отключение блоков через PHP (разрешенный список)
Этот простой пример позволит пользователям использовать только блоки "Heading", "List", "Image" и "Paragraph" - только список разрешенных блоков - все остальные блоки запрещены.
add_filter( 'allowed_block_types_all', 'example_allowed_block_types', 10, 2 );
function example_allowed_block_types( $allowed_block_types, $block_editor_context ) {
$allowed_block_types = array(
'core/heading', // Heading block
'core/image', // Image block
'core/list', // List block
'core/paragraph', // Paragraph block
);
return $allowed_block_types;
}
Получим:
#2 Что находится в параметре $block_editor_context
Пример того, что находится внутри второго параметра $block_editor_context:
add_filter( 'allowed_block_types_all', function( $allowed_block_types, $block_editor_context ) {
print_r( $block_editor_context );
return $allowed_block_types;
}, 10, 2 );
Выведет:
WP_Block_Editor_Context Object ( [name] => core/edit-post [post] => WP_Post Object ( [ID] => 257 [post_author] => 1 [post_date] => 2021-08-23 19:30:21 [post_date_gmt] => 2021-08-23 16:30:21 [post_content] => Some post content [post_title] => Ketchup [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => ketchup [to_ping] => [pinged] => [post_modified] => 2024-04-12 04:04:15 [post_modified_gmt] => 2024-04-12 01:04:15 [post_content_filtered] => [post_parent] => 0 [guid] => https://example.loc/?page_id=257 [menu_order] => 0 [post_type] => page [post_mime_type] => [comment_count] => 0 [filter] => raw ) )
Пример использование параметра:
add_filter( 'allowed_block_types_all', 'example_allowed_block_types_when_editing_posts', 10, 2 );
function example_allowed_block_types_when_editing_posts( $allowed_block_types, $block_editor_context ) {
// Only apply in the Editor when editing posts.
if (
'core/edit-post' === $block_editor_context->name &&
isset( $block_editor_context->post ) &&
'post' === $block_editor_context->post->post_type
) {
$allowed_block_types = array(
'core/heading', // Heading block
'core/image', // Image block
'core/list', // List block
'core/paragraph', // Paragraph block
);
return $allowed_block_types;
}
// Allow all blocks in the Site Editor or when editing other post types.
return true;
} #3 Исключим ненужные блоки
Хук позволяет указать список "разрешенных" блоков. Но если у вас сотни блоков, то удобнее указать только те которые нужно исключить...
Чтобы этого добится мы можем указать ненужные блоки в массиве, затем програмно получить весь список существующих блоков и исключить из них указанные.
Список всех блоков ядра смотрите здесь.
add_filter( 'allowed_block_types_all', 'wpkama_disable_gutenberg_blocks', 30, 2 );
function wpkama_disable_gutenberg_blocks( $allowed_blocks, $block_editor_context ) {
$disable_blocks = [
//'core/archives',
//'core/audio',
//'core/avatar',
//'core/block',
//'core/button',
//'core/buttons',
'core/calendar',
//'core/categories',
//'core/code',
//'core/column',
//'core/columns',
'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/cover',
//'core/details',
'core/embed',
//'core/file',
//'core/footnotes',
//'core/freeform',
//'core/gallery',
//'core/group',
//'core/heading',
//'core/home-link',
//'core/html',
//'core/image',
//'core/latest-comments',
//'core/latest-posts',
//'core/legacy-widget',
//'core/list',
//'core/list-item',
//'core/loginout',
//'core/media-text',
//'core/missing',
//'core/more',
//'core/navigation',
//'core/navigation-link',
//'core/navigation-submenu',
//'core/nextpage',
//'core/page-list',
//'core/page-list-item',
//'core/paragraph',
//'core/pattern',
//'core/post-author',
'core/post-author-biography',
//'core/post-author-name',
'core/post-comments',
'core/post-comments-form',
//'core/post-content',
//'core/post-date',
//'core/post-excerpt',
//'core/post-featured-image',
//'core/post-navigation-link',
//'core/post-template',
//'core/post-terms',
//'core/post-title',
//'core/preformatted',
//'core/pullquote',
//'core/query',
//'core/query-no-results',
//'core/query-pagination',
//'core/query-pagination-next',
//'core/query-pagination-numbers',
//'core/query-pagination-previous',
//'core/query-title',
//'core/quote',
//'core/read-more',
'core/rss',
//'core/search',
//'core/separator',
//'core/shortcode',
//'core/site-logo',
//'core/site-tagline',
//'core/site-title',
'core/social-link',
'core/social-links',
//'core/spacer',
//'core/table',
//'core/tag-cloud',
//'core/template-part',
//'core/term-description',
//'core/text-columns',
//'core/verse',
//'core/video',
//'core/widget-group',
];
// Get all registered blocks if $allowed_block_types is not already set.
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 ); // note: array list required
}
В этом коде я оставил список всех блоков, которые у меня были по умолчанию в закомментированном виде, чтобы вы могли скопировать его и раскомментировать те блоки которые вам не нужны.
Список изменений
| С версии 5.8.0 | Введена. |
Где вызывается хук
$allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context );
