Registrera en blockmall för WordPress Block Editor (Gutenberg)
I min tidigare guide utforskade jag kraften i blockmönster. Blockmallar liknar varandra, men istället för att förlita sig på att din klient infogar blockmönster i redigeraren, ger det dem en fullständig layout så snart de infogar ett nytt inlägg.
Förutsättningar
- WordPress installation
- Kodredigerare
Skapa din blockmall
I det här exemplet ska jag infoga samma blockmönster som jag skapade i min tidigare guide, men som en blockmall.
I den guiden kopierade vi editorns HTML-kod. I den här guiden ska vi göra något lite annorlunda och bygga upp en rad blocknamnområden, egenskaper och innehåll.
I sin enklaste form ser en blockmall ut ungefär så här:
$block_template = [
[ 'core/heading', [ 'level' => 2, 'content' => 'Example Block Template' ] ],
[ 'core/paragraph', [ 'content' => 'Lorem ipsum dolor sit amet labore cras venenatis.' ] ],
];
Som du kan se är det en array som innehåller block i följande mönster:
- Blockera namnutrymme
- Blockera attribut
Vi vill dock använda kapslade block, så vi kommer att skicka in en tredje parameter till denna blockarray, som är innerBlocks.
Vill du bara ha blockplaceringen?
Observera att du kan lämna attributen tomma, för att bara förse blocken utan fastställt innehåll.
Arrayen för att skapa samma block som vi skapade i blockmönsterguiden, vi behöver en mer komplex array, som så:
$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.',
]
],
]
],
],
],
]
]
];
Registrera blockmallen
Registrera en blockmall för en befintlig posttyp
För att registrera en blockmall för en befintlig inläggstyp (som postposttyp) kan du använda koden nedan för att åsidosätta posttypobjektet.
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' );
Denna kod anger helt enkelt mallen och (valfritt) [template_lock](https://wholesomecode.ltd/#template-lock)typen.
Hela koden skulle se ut så här:
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' );
Registrera en blockmall för en ny inläggstyp
Om du registrerar en inläggstyp kan du skicka mallen till templateargumentet register_post_type.
Du kan också skicka in [template_lock](https://wholesomecode.ltd/#template-lock)argumentet till register_post_type.
Malllås
Argumentet template_lockkan göra flera saker beroende på vilket argument som skickas till det. Dessa listas i Gutenbergs utvecklingsguide som:
all— förhindrar alla operationer. Det är inte möjligt att infoga nya block, flytta befintliga block eller ta bort block.insert— förhindrar att block sätts in eller tas bort, men tillåter att befintliga block flyttas.
Malllås fungerar inte på kapslade block
Malllåset fungerar endast på block på översta nivån. Använd detta till din fördel genom att skapa en layout som har fasta rubriker, bilder, stycken och ett gruppområde för din klient att infoga det innehåll de vill.
Du kan också skapa en anpassad kapslad blockmall med InnerBlocks.
Du kan också begränsa de block som du får infoga i vissa inläggstyper.
Använd blockmallen
För att använda blockmallen skapa bara ett nytt inlägg (eller anpassad inläggstyp beroende på hur du konfigurerat saker). Mallen kommer att infogas och du kommer nu att ha fasta innehållsområden på din sida.
Att infoga ett inlägg visar blockmallen
Du kan begränsa de block som är tillgängliga för olika inläggstyper med hjälp av följande kod.
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 );
Koden ovan begränsar de block som tillåts i postposttypen till följande:
-
Kolumn (
core/column) -
Kolumner (
core/columner) -
Grupp (
core/group) -
Rubrik (
core/heading) -
Stycke (
core/paragraph) -
Behöver du något mer flexibelt? Testa att registrera ett blockmönster istället
-
Behöver du något som gäller barnblock? Testa att registrera en InnerBlocks-mall