WordPress Block Editor – Inhalte und Blöcke sperren bzw. freischalten
Das Sperren von Blöcken im WordPress Block Editor dabei hilft, Layout und Struktur vor unbeabsichtigten Änderungen zu schützen.
Obwohl der Block-Editor (ehemals Gutenberg) eine große Flexibilität bei der Erstellung individueller Layouts bietet, kann diese Freiheit zu unbeabsichtigten Änderungen führen. Besonders dann, wenn mehrere Personen an einem Projekt arbeiten und unterschiedlich vertraut mit WordPress sind, können sich Fehler einschleichen.
Das Sperren von Blöcken dient dazu, das Layout und die Struktur einer Seite zu schützen, indem verhindert wird, dass wichtige Designelemente versehentlich verschoben oder bearbeitet werden.
Inhalte über den WordPress-Editor sperren
Im WordPress Block Editor gibt es verschiedene Möglichkeiten, Gruppen oder Blöcke zu sperren. Die gewünschte Einstellung kann für das ausgewählte Element selbst, oder im Falle von Gruppen, auch für alle enthaltenen Elemente aktiviert werden.
Bewegen deaktivieren
Die Option »Bewegen deaktivieren« verhindert, dass der ausgewählte Block oder die Gruppe innerhalb des Inhalts verschoben wird.
Entfernen verhindern
Wenn die Option »Entfernen verhindern« aktiviert ist, können Gruppen oder Blöcke nicht mehr gelöscht werden.
Blöcke und Gruppen freischalten
Falls die Sperre wieder aufgehoben werden soll, kann einfach der gleichen Weg über die Block-Einstellungen gegangen werden und die Sperre zu deaktivieren. Das Entsperren gibt anschließend die volle Kontrolle über den Block zurück.
Inhalte über den Code sperren
Der WordPress Block Editor arbeitet im Code mit HTML-Kommentaren, die u.a. auch Informationen zum »Gesperrt-Zustand« enthalten. Grundsätzlich können somit alle Optionen auch über den Code aktiviert bzw. deaktiviert werden.
Das folgende Beispiel zeigt einen Absatz, der nicht mehr bewegt, aber entfernt werden kann. Die Sperre (lock
) für Bewegung (move
) ist aktiv (true
). Die Sperre für Entfernen (remove
) ist inaktiv (false
).
<!-- wp:paragraph {"lock":{"move":true,"remove":false}} -->
ContentOnly
Die Option contentOnly
sorgt dafür, dass die Struktur (z.B. Gruppen etc.) des Inhalts im Editor gar nicht mehr sichtbar ist und folglich auch nicht verändert werden kann. In der Listenansicht des Editors sind nur noch die Blöcke sichtbar, die inhaltlich bearbeitet werden können. Die ContentOnly-Option kann nur über den Code aktiviert werden.
<!-- wp:group {"templateLock":"contentOnly"} -->
Editor UI entfernen
Es besteht auch die Möglichkeit, den Menü-Eintrag zum Sperren/Freischalten im Editor gänzlich zu entfernen. Typisch ist, dass die Einstellung nur für bestimmte User, Gruppen oder Post Types deaktiviert wird. Als WordPress-Agentur können wir so beispielsweise alles frei editieren, für Kunden oder einzelne Personen kann der Editor auf Wunsch eingeschränkt werden.
<?php
// Füge einen Filter hinzu, der die Block-Editor-Einstellungen anpasst.
// Die Funktion, die in diesem Filter verwendet wird, ist statisch und nimmt zwei Parameter entgegen: $settings und $context.
add_filter(
'block_editor_settings_all',
static function( $settings, $context ) {
// Zeige die Block-Sperrungsfunktion nur für Benutzer mit der Rolle "Editor" und höher an.
// Dies kann durch die Fähigkeit "delete_others_posts" gesteuert werden.
$settings['canLockBlocks'] = current_user_can( 'delete_others_posts' );
// Entferne die Benutzeroberfläche (UI) für bestimmte Benutzer.
// Hier wird der aktuelle Benutzer abgerufen und geprüft, ob seine E-Mail-Adresse in der Liste enthalten ist.
// Falls ja, wird die Block-Sperrungsfunktion deaktiviert.
$user = wp_get_current_user();
if ( in_array( $user->user_email, array( 'max@mustermann.de' ), true ) ) {
$settings['canLockBlocks'] = false;
}
// Entferne die Benutzeroberfläche (UI) für alle Seiten.
// Hier wird überprüft, ob der aktuelle Kontext ein Beitrag vom Typ "page" ist, und falls ja, wird die Block-Sperrungsfunktion deaktiviert.
if ( $context->post && $context->post->post_type === 'page' ) {
$settings['canLockBlocks'] = false;
}
// Gib die modifizierten Einstellungen zurück.
return $settings;
},
10, // Priorität des Filters (10 ist Standard).
2 // Anzahl der akzeptierten Argumente (2 in diesem Fall: $settings und $context).
);
?>