allowed_block_types_all
Позволяет удалить (оставить только разрешенные) блоки для всех типов редакторов блоков.
При использовании этого фильтра
- Блоки зарегистрированные через JS, но не указанные тут как разрешенные, также будут отключены (удалены).
- Любые паттерны блоков (block patterns), составленные из отключенных блоков, также будут отключены (удалены).
Читайте также: Как отключить определенные блоки в 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 Исключим ненужные блоки
Хук позволяет указать список "разрешенных" блоков. Но если у вас сотни блоков, то удобнее указать только те которые нужно исключить...
Чтобы этого добится мы можем указать ненужные блоки в массиве, затем програмно получить весь список существующих блоков и исключить из них указанные.
Для получения всего списка блоков используем метод WP_Block_Type_Registry::get_all_registered().
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 );