Noch besser mit ACF Block Repeater Daten arbeiten
Advanced Custom Fields Pro bietet mit dem ACF Feld-Repeater eine sehr hilfreiche Funktion, Felder mehrfach mit den jeweils unterschiedlichen Optionswerten ausgeben zu lassen. In der Regel können wir das so in unserem Theme oder Plugin Template Dateien folgendermaßen anwenden:
Auch innerhalb von ACF Blöcken können wir natürlich mit Repeater-Feldern arbeiten. Wenn wir allerdings ohne die ACF-Funktionen, bestimmte Daten abrufen wollen, können wir dafür bspw. get_post_meta( get_the_ID(), 'repeater_field_name', true );
nutzen oder speziell in Bezug auf Gutenberg-Blöcke die Funktion parse_blocks( $post->post_content );
verwenden.
Aber! Die ACF Repeater-Daten sind dafür zunächst nicht geeignet!
Woran liegt das? Wenn wir aus einem besonderen Grund nicht mit den ACF eigenen Funktionen wie get_field(), get_sub_field() oder have_rows() arbeiten können / wollen, und auf anderen Weg dennoch mit den Daten arbeiten müssen, stehen wir vor der folgenden kleinen Hürde:
Wie das obere Beispiel aus einem wphave – Schritt Liste Block zeigt, erhalten wir die ACF-Repeater Daten alle untereinander, ohne dass dabei jede Repeater-Zeile in einem eigenen Array-Block eingeordnet ist. Das erschwert das Arbeiten mit diesen Daten!
Wie formatiere ich die ACF-Repeater Daten eines Blocks in einzelne Array-Blöcke?
Unser Ziel ist es, aus den ACF-Repeater Daten ein schönes und geordnetes Array zu produzieren, womit wir anschließend besser arbeiten können. Dabei möchten wir das folgende Ergebnis erzielen:
Wie können wir das erreichen?
Als Ausgangswerte benötigen wir den Blocknamen für den ACF Block, den Feldnamen für den ACF Repeater sowie die Feldnamen der ACF Sub-Felder. Diese Werte übergeben wir an die get_acf_block_repeater( $block_name, $repeater_key, $sub_fields )
Funktion:
Zusätzlich benötigen wir eine weitere Funktion, welche innerhalb von get_acf_block_repeater()
arbeitet, um die jeweiligen Sub-Feldwerte des ACF-Repeaters zu erhalten. Die folgende Funktion ist also zusätzlich erforderlich:
Auf den herkömmlichen ACF-Weg würden wir das unter der Verwendung von have_rows() so umsetzen:
Die bereits oben erwähnte Funktion get_acf_block_repeater( $block_name, $repeater_key, $sub_fields )
, wenden wir dabei wie folgt an, um die ACF Repeater Daten ohne ACF-Funktionen in einer sauberen und in Array-Blöcken, geordneten Form zu erhalten:
Abschließend die ACF-Repeater Daten in einer foreach() Schleife ausgeben lassen
Nun ist es soweit! Ganz ohne die Verwendung einer einzigen ACF-Funktion können wir unter der Verwendung von Advanced Custom Fields Pro im WordPress Backend arbeiten und im Frontend darauf verzichten. Wie folgt, geben wir im letzten Schritt die Repeater-Daten durch eine foreach() Schleife aus: