Добавление пользовательской категории как обёртки для кастомных блоков в редакторе Gutenberg
Как известно из предоставленного API Gutenberg, мы можем создать кастомный блок следующим образом:
const { registerBlockType } = wp.blocks;
registerBlockType( 'my-namespace/my-block', {
})
Но как создать обёртку (категорию, например, для макетов) вокруг моих кастомных блоков в редакторе Gutenberg? Допустим, я хочу иметь коллектор для своих пользовательских элементов, таких как слайдер, галерея...

Погружаясь глубже в документацию, я получил следующий результат.
Существует способ группировать пользовательские блоки по заданной категории в Gutenberg, для этого есть метод block_categories_all
. С помощью фильтра можно расширить стандартные категории своими собственными.
Вот мой пример:
add_filter( 'block_categories_all', function( $categories, $post ) {
return array_merge(
$categories,
array(
array(
'slug' => 'my-slug',
'title' => 'my-title',
),
)
);
}, 10, 2 );
Подробнее об этом можно узнать в предоставленном API.

Выглядит хорошо, но у меня не получается заставить это работать. Я могу подтвердить, что фильтр вызывается в get_block_categories() в post.php, как обнаружил Pat J.

Можно отфильтровать список категорий блоков по умолчанию с помощью фильтра block_categories
. Поместите код в файл functions.php
или your-plugin.php
. Подробнее в руководстве WordPress Gutenberg Handbook
function my_plugin_block_categories( $categories, $post ) {
if ( $post->post_type !== 'post' ) {
return $categories;
}
return array_merge(
$categories,
array(
array(
'slug' => 'my-category',
'title' => __( 'Моя категория', 'my-plugin' ),
'icon' => 'wordpress',
),
)
);
}
add_filter( 'block_categories', 'my_plugin_block_categories', 10, 2 );
Для использования SVG-иконки вы можете заменить иконку в JS. Определите свою иконку.
const icon = <svg className='components-panel__icon' width='20' height='20' viewBox='0 0 20 20' aria-hidden='true' role='img' focusable='false' xmlns='http://www.w3.org/2000/svg'>
<rect fill="#ffffff" x="0" y="0" width="20" height="20"/>
<rect fill="#1163EB" x="2" y="2" width="16" height="16" rx="16"/>
</svg>;
и замените иконку с помощью функции updateCategory
из wp.blocks;
. Добавление класса components-panel__icon
добавит отступ в 6px
слева от иконки.
( function() {
wp.blocks.updateCategory( 'my-category', { icon: icon } );
} )();

И куда нужно добавлять функцию wp.blocks.updateCategory
? Я пробовал это сделать, но у меня не получается. Можете поделиться полным рабочим .js файлом? Также, если я регистрирую категорию и у меня нет блоков, назначенных для этой категории, должна ли она все равно отображаться? У меня также не получается зарегистрировать категорию. Еще я не вижу фильтр block_categories в справочной документации по фильтрам: https://codex.wordpress.org/Plugin_API/Filter_Reference

Я не использую никаких шаблонов. Вот входной файл для моих блоков https://codepen.io/talentedaamer/pen/YMZzjY, используемый в https://wordpress.org/plugins/easy-blocks/
