Zum Inhalt

Post Meta

Diese Seite ist noch im Aufbau

Der Bestand ist übernommen und die Angaben sind gegen den Code geprüft. Beispiele und Erläuterungen werden noch ergänzt.

Wozu

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 Template-Funktionen).

Weiter