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)

Deine Meinung ist uns wichtig! Auch wenn du denkst, dass unser Beitrag so spannend wie eine Präsentation über die Vorteile von Kalkulationstabellen ist, teile es uns mit!

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