ACF-Block: Verwendung mit «lock» einschränken

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

1 Star2 Stars3 Stars4 Stars5 Stars (2)

Wenn du denkst, dass dieser Beitrag ein Meisterwerk der Webentwicklung ist, dann hinterlasse uns einen Kommentar. Wenn nicht, kannst du trotzdem kommentieren - wir akzeptieren auch konstruktive Kritik!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert