Es kann frustrierend sein, wenn wichtige Inhalte versehentlich gelöscht oder verändert werden, sei es von Mitarbeitern oder Kunden. Mit dieser Anleitung zur Block-Sperre kannst du die Verwendung von Blöcken einschränken und sicherstellen, dass deine Inhalte nicht durcheinander geraten.
Block registrieren
Zunächst registrieren wir einen neuen Block-Typ in WordPress, indem wir den entsprechenden Code in der functions.php
-Datei deines Themes hinzufügen. Dabei geben wir den Pfad an, an dem sich der Block befindet. In diesem Fall befindet sich der Block im Verzeichnis [your theme]/blocks/acf_aktuelles
.
register_block_type(dirname(__FILE__) . '/blocks/acf_aktuelles');
Eigenschaften und Ausgabe definieren
In Verzeichnis [your theme]/blocks/acf_aktuelles/
erstellen wir die Dateien:
block.json:
die Eigenschaften des Blocks definieren.block.php
: die Ausgabe des Blocks definieren.block.css
: das Aussehen des Blocks definieren.
In der Datei block.json
geben wir bei der Eigenschaft attributes
an, dass der Block weder entfernt noch verschoben werden kann.
{
"name": "Aktuelles",
"title": "aktuelles",
"description": "Place your description here.",
"style": [
"file:./block.css"
],
"category": "formatting",
"icon": "admin-comments",
"keywords": [],
"acf": {
"mode": "edit",
"renderTemplate": "block.php"
},
"align": "full",
"attributes": {
"lock": {
"type": "object",
"default": {
"move": true,
"remove": true
}
}
}
}
Einschränkung bei InnerBlocks verwenden
Da der Block innere Blöcke beinhaltet, fügen wir dem InnerBlock-Template das Attribut templateLock="all"
hinzu. Dies ermöglicht es, die Bearbeitungsmöglichkeiten im Editor einzuschränken und die Struktur des Blocks beizubehalten.
<?php
$classes = ['my_aktuelles_block'];
if( !empty( $block['align'] ) ):
$classes[] = 'align' . $block['align'];
endif;
$anchor = '';
if( !empty( $block['anchor'] ) ):
$anchor = ' id="' . sanitize_title( $block['anchor'] ) . '"';
endif;
// ACF
$aktuelles_anzeigen = get_field('aktuelles_anzeigen');
$aktuelles_endtime = get_field('aktuelles_endtime');
if ( !empty( $aktuelles_endtime ) ) {
$abgelaufen = strtotime($aktuelles_endtime);
} // endif
$now = strtotime("now");
$template = array(
array('core/group',
array(
array('core/heading',
array(
'level' => 2,
'content' => 'Titel aktuelles',
)
),
array('core/paragraph',
array(
'content' => 'Aktuelles...',
),
),
),
),
);
if ( $aktuelles_anzeigen == true) {
if ( !empty( $abgelaufen ) && $now <= $abgelaufen ) {
echo '<div class="block-wrapper">';
echo '<div class="' . join( ' ', $classes ) . '"' . $anchor . '>';
echo '<InnerBlocks template="' . esc_attr( wp_json_encode( $template ) ) . '" templateLock="all" />';
echo '</div>';
echo '</div>';
} // endif
} // endif
?>
So, das wars bereits. Wenn du weitere Infofmationen brauchst, dann kannst Du einen Blick in die magische Schatztruhe der zusätzlichen Ressourcen zu werfen:
Locking Blocks in WordPress 5.9
How to lock blocks and templates
InnerBlocks with ACF blocks
ACF Blocks in ACF 6