Zum Inhalt

Post Meta (Engine Helper)

Überblick

Die Klasse TwthemeGetPostMeta (Engine Helper) lädt die gespeicherten Post-Meta-Daten eines Beitrags oder einer Seite und vereinheitlicht sie mit den Felddefinitionen des jeweiligen Post-Typs. So erhältst du im Template ein Array, in dem zu jedem Feld nicht nur der Wert, sondern auch Label, Typ, Gruppe und weitere Metadaten verfügbar sind – inklusive Repeater-Felder.

  • Klasse: TwthemeGetPostMeta
  • Typischer Ort: includes/engine/GetData.php (oder vergleichbar im Theme)

Voraussetzungen

  • Der Post-Typ muss über eine Felddefinition verfügen: twtheme_{post_type}_fields() (siehe Felder).
  • Die Funktion twtheme_get_current_post_type() wird genutzt, wenn kein Post-Typ übergeben wird.

Grundlegende Anwendung

// Im Kontext der aktuellen Schleife: aktueller Post, aktueller Post-Typ
$meta = new TwthemeGetPostMeta();
$data = $meta->get_post_meta();

// Mit expliziter Post-ID
$meta = new TwthemeGetPostMeta(12345);
$data = $meta->get_post_meta();

// Mit expliziter Post-ID und Post-Typ (z. B. für Custom Post Types)
$meta = new TwthemeGetPostMeta(12345, 'product');
$data = $meta->get_post_meta();

Konstruktor

Parameter Typ Standard Beschreibung
$post_id string\|int get_the_ID() Post-ID. Leer = aktueller Post in der Loop.
$post_type string\|null twtheme_get_current_post_type() Post-Typ für die Felddefinition.

Öffentliche Methoden

get_post_meta()

Liefert das vollständige, zusammengeführte Meta-Array. Struktur:

  • Erste Ebene: Tab-/Gruppen-ID (entspricht dem Meta-Key der Engine).
  • Zweite Ebene: Feldname bzw. bei Repeatern der Eintrags-Index.
  • Jedes Feld enthält: label, placeholder, group, group-child, id, type, title, value.
$meta = new TwthemeGetPostMeta();
$data = $meta->get_post_meta();

// Beispiel: Wert eines einfachen Feldes
$headline = $data['content_tab']['headline']['value'] ?? '';

// Mit twtheme_get_value() (Fallback auf placeholder)
$headline = twtheme_get_value($data['content_tab']['headline']);

get_section($section_name)

Liefert nur eine Sektion (einen Tab) anhand der Tab-/Gruppen-ID. Nützlich, wenn du nur die Felder eines bestimmten Meta-Keys brauchst.

Parameter Typ Beschreibung
$section_name string ID der Sektion (z. B. content_tab, sidebar_tab).

Rückgabe: Array der Sektion oder false, wenn die Sektion nicht existiert.

$meta = new TwthemeGetPostMeta();
$content = $meta->get_section('content_tab');
if ($content !== false) {
    $headline = twtheme_get_value($content['headline'] ?? []);
}

get_group($group_name, $only_with_value = false)

Filtert die gesamten Meta-Daten nach einer Gruppe (Feldoption group). So kannst du z. B. alle Felder mit group => 'contact' oder group => 'social' gebündelt auslesen.

Parameter Typ Beschreibung
$group_name string Name der Gruppe (Wert aus der Felddefinition).
$only_with_value bool Optional. true = nur Einträge mit (nicht leerem) Wert. Standard: false.

Rückgabe: Array mit allen Feldern, die zur Gruppe gehören. Struktur berücksichtigt Repeater und group-child (Untergruppen).

$meta = new TwthemeGetPostMeta();
$contact = $meta->get_group('contact');
$contact_filled = $meta->get_group('contact', true);

Datenstruktur pro Feld

Jedes Feld im zurückgegebenen Array enthält (sofern von der Felddefinition gesetzt):

Key Beschreibung
value Gespeicherter Wert (das, was du meist ausgeben willst).
label Label aus der Felddefinition.
placeholder Platzhaltertext.
group Gruppenzuordnung.
group-child Untergruppe (wird in get_group() für die Struktur genutzt).
id Feld-ID.
type Feldtyp (z. B. text, textarea, repeater).
title Titel/Tooltip.

Werte ausgeben: Nutze dafür die Helfer twtheme_get_value($data) und ggf. twtheme_get_title($data), um einheitlich Wert bzw. Titel mit Fallback auf Platzhalter/Label zu erhalten.

Repeater-Felder

Bei Feldern vom Typ Repeater hat die zweite Ebene pro Eintrag einen numerischen Index (0, 1, 2, …). Darunter liegen die einzelnen Repeater-Felder wieder mit label, value, type usw.

$meta = new TwthemeGetPostMeta();
$data = $meta->get_post_meta();
$repeater = $data['content_tab']['facts'] ?? [];

foreach ($repeater as $index => $entry) {
    foreach ($entry as $field_name => $field_data) {
        if ($field_data['type'] === 'headline') continue;
        echo '<div>' . esc_html(twtheme_get_value($field_data)) . '</div>';
    }
}

Typische Einsatzfälle

  1. Single-/Page-Template: Alle Meta-Felder des aktuellen Posts laden und in Variablen oder Partials nutzen.
  2. Nur eine Meta-Box: get_section('tab_id') verwenden und nur diese Felder verarbeiten.
  3. Gruppierte Ausgabe (z. B. Kontakt, Social): get_group('contact') bzw. get_group('contact', true) für nur ausgefüllte Felder.
  4. Repeater ausgeben: Über get_post_meta() in die Repeater-Struktur gehen und mit twtheme_get_value() die Werte ausgeben.

Abhängigkeiten

  • twtheme_{post_type}_fields() – liefert die Felddefinitionen (Tabs + Felder).
  • twtheme_get_current_post_type() – Ermittlung des Post-Typs.
  • twtheme_get_value($data) – sichere Wertausgabe mit Fallback (siehe Helfer Funktionen).

Siehe auch