Diese Webseite befindet sich derzeit im Aufbau !

Alle ACF Block IDs bei mehrfacher Verwendung desselben Blocktyps ausgeben lassen

Wenn wir mit Advanced Custom Fields Pro individuelle Blöcke für den WordPress Gutenberg-Editor erstellen, kann ein und der selbe Blocktyp mehrfach auf in einem Beitrag oder auf einer Seite verwendet werden. Außer wir haben die Ausgabe des ACF Blocks mit acf_register_block_type( array( 'supports' => array( 'multiple' => false ) ) ); auf maximal 1 Verwendung pro Beitrag oder Seite limitiert.

Wenn wir allerdings die selben ACF Block mehrfach auf einer Seite verwenden und bspw. weitere Bedingungen und Prüfungen anwenden wollen, ist es wichtig, dass wir jeden ACF Block für sich selbst beeinflussen können. In diesem Fall benötigen wir für jeden ACF Block die eindeutige ID.

Ein Beispiel: Wir haben mit ACF einen Block erstellt, welcher die neusten Beiträge anzeigt. Denselben Block verwenden wir etwas weiter unten auf der Seite erneut und wollen diesen stattdessen mit dem kleinen Unterschied darstellen, dass er die beliebtesten oder selektierte Beiträge ausgibt.

Jetzt verwenden wir denselben Block mehrfach auf der selben Seite. Da er die WordPress-Beiträge auflistet, wird dies bspw. durch get_posts() geschehen. Das bedeutet wiederum, dass wir zweimal Query-Anfragen auf die Datenbank haben und damit die Ladezeit der Webseite negativ beeinflusst wird.

Dieses kleine Problem können wir lösen, indem wir WordPress-Transients verwenden und die Datenbank-Abfragen für eine bestimmte Zeit zwischenspeichern. Um das umzusetzen benötigen wir für jeden ACF Block eine eindeutige Kennung (ID).

Wie bekomme ich für einen ACF Block alle eindeutigen IDs, wenn dieser Block mehrfach verwendet wird?

ACF speichert bereits für jeden Block eine eindeutige ID innerhalb von post_content ab. Über die WordPress-Funktion parse_blocks( $post->post_content ) können wir darauf zugreifen. Die folgende Helper-Funktion get_acf_block_ids( $post_id, $block_name ) ist für diesen Zweck sehr hilfreich:

Durch die Verwendung der Funktion get_acf_block_ids( $post_id, 'acf/blockname' ); erhalten wir automatisch alle vorhandenen ACF Block IDs, welche innerhalb eines Beitrags oder auf einer Seite verwendet werden:

Das Resultat ist ein Array aller Block IDs die innerhalb einer Seite gefunden werden:

Die Block IDs könnten wir nun dafür verwenden um den Inhalt der Beitragslisten in einem WordPress-Transient zu speichern. Dafür könnten wir dem Transient eine eindeutige ID vergeben die z.B. 'my_acf_block_' . $block_id; lauten kann: