ACF Repeater ohne ACF-Funktionen mit get_post_meta() oder get_option() nutzen
Advanced Custom Fields Pro ist ein gewaltiges Plugin mit ebenso gewaltig vielen Funktionen, die zur Anwendung kommen, wenn man ACF ausgiebiger in seinen Theme oder Plugin nutzt. Ein kleiner Nachteil dabei ist, dass dies negative Auswirkungen auf die Ladezeit der WordPress Webseite haben kann. Eine Alternative bietet hierbei, komplett auf ACF-Funktionen im Frontend zu verzichten und nur noch im WordPress Backend selbst mit ACF zu arbeiten.
Der folgende Artikel zeigt dafür einen kleinen Teil des Großen und Ganzen auf, wie es möglich ist mit ACF-Repeater Feldern zu arbeiten, ohne dabei die ACF-Funktionen im Frontend nutzen zu müssen. Stattdessen verwenden wir die WordPress-Funktionen get_post_meta() und get_option().
Auf den herkömmlichen Weg, können wir mit ACF Repeater Felddaten wie folgt arbeiten und benutzerdefinierte Werte in unseren Templates ausgeben lassen:
Wenn wir im Frontend allerdings nur mit den WordPress Standard-Funktionen arbeiten wollen, müssen wir auf die Verwendung von have_rows() und get_sub_field() verzichten und stattdessen mit get_post_meta() arbeiten.
Aber hierbei gibt es eine kleine Hürde! Die Repeater-Daten von ACF werden nicht in sauberen und geordneten Array-Blöcken ausgegeben!
Wie im folgenden Beispiel zu sehen ist, erhalten wir die ACF Repeater Daten alle untereinander und nicht etwa jede Zeile in einem eigenen verschachtelten Array, wenn die Daten durch get_post_meta( get_the_ID(), $repeater_field_name, true );
abgerufen werden:
Wir benötigen die oberen ACF Repeater Daten pro Zeile also jeweils in einem einzelnen für sich verschachtelten Array-Block, um sie bspw. in einer foreach() Schleife verarbeiten zu können.
Wie erhalte ich die ACF-Repeater Daten in einzeln geordneten Array-Blöcken?
Es ist also das Ziel die gespeicherten ACF-Repeater Daten wie folgt zu erhalten:
Wie können wir das für get_post_meta() erreichen?
Die Funktion get_acf_repeater( $repeater_key, $sub_fields )
ist eine Wrapper-Funktion für get_post_meta() und wandelt die ACF-Repeater Daten automatisch in einzeln verschachtelte Array-Blocke um:
Der herkömmliche Weg ist die Verwendung der ACF-Funktion have_rows() und der sich darin befindlichen get_sub_field() Funktionen. Das sieht wie folgt aus:
Durch die Einbindung der get_acf_repeater()
Funktion können wir nun stattdessen wie folgt in unseren Template-Dateien arbeiten, um ACF-Repeater Felddaten anzusteuern:
Zu guter Letzt geben wir die ACF-Repeater Daten in einer foreach() Schleife aus
Da wir jetzt alle Daten in einzeln verschachtelte Array-Blöcke umgewandelt haben, können wir diese nun in einer foreach() Schleife verarbeiten und ausgeben lassen:
Stattdessen mit get_option() arbeiten
ACF bietet des Weiteren auch die Möglichkeit Repeater-Felder in den WordPress Optionen zu integrieren. WordPress Optionen lassen sich unter Verwendung von get_option('option_name')
ansteuern.
Das folgende Beispiel zeigt wie wir ACF-Repeater Felddaten im Zusammenspiel mit get_option() nutzen und als geordnetes Array ausgeben lassen können:
Auch eine Kombination von get_post_meta() und get_option() ist möglich.
Natürlich können wir auch beide Varianten miteinander verknüpfen und in einer und der selben Funktion abhandeln. So verwenden wir get_acf_repeater( $repeater_key, $sub_fields )
um an ACF-Repeater Felddaten des jeweiligen Beitrags (Post) zukommen oder get_acf_repeater( $repeater_key, $sub_fields, 'option' )
, wenn wir stattdessen die Repeater Felddaten aus den WordPress Optionen benötigen: