Зарегистрируйте шаблон блока для редактора блоков WordPress (Gutenberg)
В моем предыдущем руководстве я исследовал мощь шаблонов блоков. Шаблоны блоков похожи, но вместо того, чтобы полагаться на то, что ваш клиент вставит шаблоны блоков в редактор, он предоставляет им полный макет, как только они вставляют новый пост.
Предпосылки
- Установка WordPress
- Редактор кода
Создайте свой шаблон блока
В этом примере я собираюсь вставить тот же шаблон блока, который я создал в предыдущем руководстве, но в качестве шаблона блока.
В этом руководстве мы скопировали HTML-код вывода редактора. В этом руководстве мы собираемся сделать что-то немного другое и создать массив пространств имен блоков, свойств и содержимого.
В своей простейшей форме шаблон блока выглядит примерно так:
$block_template = [
[ 'core/heading', [ 'level' => 2, 'content' => 'Example Block Template' ] ],
[ 'core/paragraph', [ 'content' => 'Lorem ipsum dolor sit amet labore cras venenatis.' ] ],
];
Как видите, это массив, содержащий блоки по следующему шаблону:
- Пространство имен блоков
- Атрибуты блока
Однако мы хотим использовать вложенные блоки, поэтому мы собираемся передать третий параметр в этот массив блоков — innerBlocks.
Просто хотите разместить блок?
Обратите внимание, что вы можете оставить атрибуты пустыми, чтобы просто предоставить блоки без установленного содержимого.
Массив для создания того же блока, который мы создали в руководстве по шаблонам блоков, нам нужен более сложный массив, например:
$block_template = [
[
'core/group',
[],
[
[
'core/heading',
[
'level' => 2,
'content' => 'Example Block Template',
]
],
[
'core/paragraph',
[
'content' => 'Lorem ipsum dolor sit amet labore cras venenatis.',
]
],
[
'core/columns',
[],
[
[
'core/column',
[],
[
[
'core/heading',
[
'level' => 3,
'content' => 'Sub Heading 1',
]
],
[
'core/paragraph',
[
'content' => 'Lorem ipsum dolor sit amet id erat aliquet diam ullamcorper tempus massa eleifend vivamus.',
]
],
]
],
[
'core/column',
[],
[
[
'core/heading',
[
'level' => 3,
'content' => 'Sub Heading 2',
]
],
[
'core/paragraph',
[
'content' => 'Morbi augue cursus quam pulvinar eget volutpat suspendisse dictumst mattis id.',
]
],
]
],
],
],
]
]
];
Зарегистрируйте шаблон блока
Регистрация шаблона блока для существующего типа записи
Чтобы зарегистрировать шаблон блока для существующего типа сообщения (например, типа postсообщения), вы можете использовать приведенный ниже код, чтобы переопределить объект типа сообщения.
function register_block_template() {
$post_type_object = get_post_type_object( 'post' );
$post_type_object->template = $block_template;
$post_type_object->template_lock = 'all';
}
add_action( 'init', 'register_block_template' );
Этот код просто устанавливает шаблон и (необязательно) [template_lock](https://wholesomecode.ltd/#template-lock)тип.
Полный код будет выглядеть так:
function register_block_template() {
$block_template = [
[
'core/group',
[],
[
[
'core/heading',
[
'level' => 2,
'content' => 'Example Block Template',
]
],
[
'core/paragraph',
[
'content' => 'Lorem ipsum dolor sit amet labore cras venenatis.',
]
],
[
'core/columns',
[],
[
[
'core/column',
[],
[
[
'core/heading',
[
'level' => 3,
'content' => 'Sub Heading 1',
]
],
[
'core/paragraph',
[
'content' => 'Lorem ipsum dolor sit amet id erat aliquet diam ullamcorper tempus massa eleifend vivamus.',
]
],
]
],
[
'core/column',
[],
[
[
'core/heading',
[
'level' => 3,
'content' => 'Sub Heading 2',
]
],
[
'core/paragraph',
[
'content' => 'Morbi augue cursus quam pulvinar eget volutpat suspendisse dictumst mattis id.',
]
],
]
],
],
],
]
]
];
$post_type_object = get_post_type_object( 'post' );
$post_type_object->template = $block_template;
$post_type_object->template_lock = 'all';
}
add_action( 'init', 'register_block_template' );
Регистрация шаблона блока для нового типа записи
Если вы регистрируете тип записи, вы можете передать шаблон в templateаргумент register_post_type.
Вы также можете передать [template_lock](https://wholesomecode.ltd/#template-lock)аргумент в register_post_type.
Блокировка шаблона
Аргумент template_lockможет выполнять несколько действий в зависимости от переданного ему аргумента. Они перечислены в руководстве по разработке Gutenberg как:
all— предотвращает все операции. Невозможно вставлять новые блоки, перемещать существующие блоки или удалять блоки.insert— запрещает вставлять или удалять блоки, но позволяет перемещать существующие блоки.
Блокировка шаблона не работает с вложенными блоками
Блокировка шаблона работает только с блоками верхнего уровня. Используйте это в своих интересах, создав макет с фиксированными заголовками, изображениями, абзацами и групповой областью, чтобы ваш клиент мог вставлять любой контент, который ему нравится.
Вы также можете создать собственный шаблон вложенного блока с помощью InnerBlocks.
Вы также можете ограничить блоки, которые вам разрешено вставлять в определенные типы сообщений.
Используйте шаблон блока
Чтобы использовать шаблон блока, просто создайте новый пост (или пользовательский тип поста, в зависимости от того, как вы его настроили). Шаблон будет вставлен, и теперь у вас будут фиксированные области содержимого на вашей странице.
Вставка сообщения показывает шаблон блока
Вы можете ограничить блоки, доступные для различных типов сообщений, используя следующий код.
function filter_allowed_block_types( $allowed_block_types, $post) {
if ($post->post_type !== 'post') {
return $allowed_block_types;
}
$allowed_block_types = [
'core/column',
'core/columns',
'core/group',
'core/heading',
'core/paragraph',
];
return $allowed_block_types;
}
add_filter( 'allowed_block_types', 'filter_allowed_block_types', 10, 2 );
Приведенный выше код ограничивает блоки, разрешенные в postтипе сообщения, следующими:
-
Столбец (
core/column) -
Столбцы (
core/columnы) -
Группа (
core/group) -
Заголовок (
core/heading) -
Абзац (
core/paragraph) -
Нужно что-то более гибкое? Вместо этого попробуйте зарегистрировать шаблон блока
-
Нужно что-то, что относится к дочерним блокам? Попробуйте зарегистрировать шаблон InnerBlocks