Зареєструйте шаблон блоку для редактора блоків 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