ACF-Felder in einer WooCommerce-Produkttabelle: Spalten, Links und Filter
Um ACF-Felder in einer WooCommerce-Produkttabelle anzuzeigen, müssen Sie zuerst wissen, wo der Wert liegt. Produktattribute, Kategorien und Marken sind Taxonomien, und die Tabelle bietet sie von selbst als Spalten an. ACF-Felder und die Felder, die die meisten anderen Plugins zu Produkten hinzufügen, sind Post-Meta: Die Tabelle zeigt sie erst, nachdem Sie ihr den genauen Meta-Schlüssel mitgeteilt haben. Im Folgenden erfahren Sie, wie beide Fälle funktionieren, welche ACF-Feldtypen ohne Code korrekt angezeigt werden und wie Sie URLs, Dateien und IDs in Links oder Bilder verwandeln.
ACF-Felder in der Registerkarte Meta zu einer WooCommerce-Produkttabelle hinzufügen
ACF speichert jeden Wert in der Standardtabelle wp_postmeta unter dem Feld-Namen. Die Tabelle kann jeden solchen Wert lesen, aber sie kann nicht erraten, welche der Hunderte Meta-Schlüssel in einem Shop für Sie wichtig sind; Felder aus ACF, Pods, Preis-Plugins und anderen Quellen erscheinen daher nie automatisch. Sie registrieren sie pro Tabelle:
- Klicken Sie auf der WOOT-Admin-Seite auf das Zahnrad-Symbol (Tabellenoptionen (table options)) Ihrer Tabelle und öffnen Sie die Registerkarte Meta.
- Klicken Sie auf Meta-Feld hinzufügen (Add meta field). Es erscheint eine Zeile mit dem Platzhalter-Schlüssel
0 write key here. - Füllen Sie Titel (Title) aus, tragen Sie den exakten Feldnamen unter Meta-Schlüssel (Meta key) ein und wählen Sie den Typ (Type):
text,numberodercalendar. Lassen Sie ihn nicht auf not defined stehen: Der Typ bestimmt, wie der Wert sortiert und gefiltert wird. - Wechseln Sie zur Registerkarte Spalten (Columns), fügen Sie eine Spalte hinzu und wählen Sie das neue Feld aus (es steht unter seinem Titel in der Liste). Schalten Sie es auf Aktiv (Active).
- Um danach zu filtern, ziehen Sie es in der Registerkarte Filter in das Filterformular.
| Typ | Zelle | Sortierung | Filterelement |
|---|---|---|---|
text | Der Wert wie gespeichert | Alphabetisch | Texteingabe, findet jeden Teil des Wertes |
number | Der Wert wie gespeichert | Numerisch | Bereichsregler; Minimum und Maximum werden aus der Datenbank gelesen, ganze Zahlen |
calendar | Ein Datum im Datumsformat der Website | Numerisch: exakt bei Zeitstempeln, nur nach Jahr bei ACF-Datum-Uhrzeit-Werten | Kalender „Von“ und „Bis“; setzen Sie Datentyp (Data type) auf datetime für ACF oder unixtimestamp für Zeitstempel |
Drei Details sparen Zeit. Verwenden Sie den Feldnamen (spec_sheet), nicht den Feldschlüssel (field_5f2a…) und nicht den versteckten Zwilling, der mit einem Unterstrich beginnt (_spec_sheet): ACF speichert dort den Feldschlüssel, eine Zelle mit field_… bedeutet also den falschen Schlüssel. Das Sortieren nach einem Meta-Schlüssel blendet Produkte aus, die dafür keinen Wert haben, so funktionieren WordPress-Abfragen; diese FAQ zeigt, wie Sie sie behalten. Und Meta-Felder gehören zu einer Tabelle; um einen Schlüssel allen Tabellen auf einmal hinzuzufügen, siehe Meta-Schlüssel global hinzufügen.
Welche ACF-Feldtypen ohne Code funktionieren
Was die Zelle zeigt, hängt davon ab, was ACF in die Datenbank schreibt, nicht vom Rückgabeformat (Return Format), das Sie in ACF gewählt haben (diese Einstellung betrifft nur get_field() in Vorlagen).
| ACF-Feldtyp | Gespeichert als | In der Tabelle |
|---|---|---|
| Text, Textbereich, Zahl, Bereich, E-Mail, Farbwähler | Einfacher Wert | Funktioniert mit text oder number |
| Auswahl (einzeln), Radio-Button, Button-Gruppe | Der Wert der Auswahl | Funktioniert; zeigt den Wert, nicht die Beschriftung |
| Wahr / Falsch | 1 oder 0 | Funktioniert, gibt aber die Ziffer aus |
| Datum-Uhrzeit-Wähler | 2026-12-31 18:00:00 | Funktioniert mit calendar und dem Datentyp datetime |
| Datumswähler | 20261231 | Nicht das Format, für das der Kalenderfilter gebaut ist; bevorzugen Sie den Datum-Uhrzeit-Wähler oder fügen Sie es als text hinzu und formatieren Sie es per Code |
| URL | Die Adresse als Text | Zeigt die Adresse, nicht einen Link; erfordert Code |
| Bild, Datei, Beitragsobjekt, Seiten-Link | Eine Beitrags- oder Anhangs-ID | Zeigt eine Zahl; erfordert Code |
| Checkbox, Mehrfachauswahl, Galerie, Beziehung, Link | Ein serialisiertes Array | So nicht lesbar; erfordert Code |
| Gruppe | Ein Meta-Schlüssel pro Unterfeld | Fügen Sie ein Unterfeld mit seinem vollständigen Schlüssel hinzu, groupname_subfieldname |
| Wiederholung (Repeater), Flexible Inhalte | Nummerierte Schlüssel, name_0_sub | Nicht ein Schlüssel; verwenden Sie eine eigene Spalte |
Links, PDF-Anleitungen, Bilder: die Zelle mit woot_meta_data_cell formatieren
Ein typischer erster Versuch ist, <a href="…">Spec PDF</a> in ein Produktattribut einzugeben. Das kann nicht funktionieren: Ein Attributwert ist ein Begriffsname, WordPress entfernt HTML aus Begriffsnamen, und die Tabelle umschließt jeden Begriff bereits mit einem Link zu seinem Archiv. Speichern Sie stattdessen nur die URL in einem Meta-Feld (einem ACF-URL- oder -Datei-Feld oder einem einfachen benutzerdefinierten Feld ohne Leerzeichen im Schlüssel), fügen Sie es in der Registerkarte Meta mit dem Typ text hinzu und erzeugen Sie den Link im Filter woot_meta_data_cell. Er erhält den Rohwert, die Zeile der Registerkarte Meta, die Produkt-ID und die Tabellen-ID, und was er zurückgibt, landet als HTML in der Zelle:
/*
* Products tables: display meta fields added in the Meta tab.
* Child theme functions.php or a code snippets plugin.
* Replace the keys in "case" with your own ACF field names.
*/
add_filter('woot_meta_data_cell', function ($value, $meta_data, $post_id, $table_id) {
switch ($meta_data['meta_key']) {
case 'spec_sheet': // ACF URL field: the value is a web address
$value = $value ? '<a href="' . esc_url($value) . '" target="_blank" rel="noopener">Spec sheet (PDF)</a>' : '';
break;
case 'manual': // ACF File field: the database holds the attachment ID
$url = $value ? wp_get_attachment_url((int) $value) : '';
$value = $url ? '<a href="' . esc_url($url) . '" target="_blank" rel="noopener">Manual</a>' : '';
break;
case 'energy_label': // ACF Image field: attachment ID
$value = $value ? wp_get_attachment_image((int) $value, 'thumbnail') : '';
break;
case 'colors': // ACF Checkbox or multiple Select: an array of values
$value = is_array($value) ? implode(', ', $value) : $value;
break;
case 'release_date': // ACF Date Picker: stored as Ymd
$date = $value ? DateTime::createFromFormat('!Ymd', $value) : false;
$value = $date ? date_i18n(get_option('date_format'), $date->getTimestamp()) : '';
break;
}
return $value;
}, 10, 4);
Die Prüfungen auf leere Werte sind wichtig: Ohne sie zeigt jede Zeile einen Link, auch Produkte ohne Datei. Um eine Regel auf eine Tabelle zu beschränken, fügen Sie eine Bedingung wie (int) $table_id === 21 hinzu. Verwenden Sie diesen Filter mit Feldern vom Typ text und number; ein calendar-Feld wandelt den zurückgegebenen Wert anschließend in ein Datum um, sodass dafür zurückgegebenes HTML verloren ginge. Viele Werte auf einmal lassen sich am einfachsten mit einem beliebigen Bulk-Editor befüllen, der benutzerdefinierte Felder bearbeiten kann.
Werte, die nicht ein Meta-Schlüssel sind: eine eigene Spalte
Braucht die Zelle Daten aus mehreren Quellen oder aus etwas, das kein einzelner Meta-Schlüssel ist (ein Repeater, ein im Produkt eingegebenes benutzerdefiniertes Attribut, eine Berechnung), registrieren Sie mit woot_profile_extend Ihre eigene Spalte. Der Callback in action erhält für jede Zeile die Produkt-ID und kann jede WordPress-, WooCommerce- oder ACF-Funktion verwenden, darunter get_field():
/*
* Products tables: a "Material" column built from a product attribute.
* Works for global attributes and for custom attributes typed in the product.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woot_profile_extend', function ($profile, $action) {
if ('woot_woocommerce_tables' !== $action) {
return $profile;
}
$profile['material_text'] = [
'title' => 'Material',
'order' => false, // not sortable
'action' => function ($post_id) {
$product = wc_get_product($post_id);
return $product ? $product->get_attribute('material') : '';
},
];
return $profile;
}, 10, 2);
Das neue Feld erscheint in der Liste Feld (Field) der Registerkarte Spalten (Columns) unter seinem Titel. Eine solche Spalte dient nur der Anzeige: Sortieren und Filtern erfordern Abfragelogik, die Ihnen die Registerkarte Meta abnimmt und die Sie sonst selbst schreiben müssten.
Attribute, Kategorien und Marken: fertige Spalten
Jede für Produkte registrierte Taxonomie erscheint in der Liste Feld (Field) der Registerkarte Spalten (Columns): Kategorien, Schlagwörter, jedes globale Attribut (WooCommerce stellt ihnen das Präfix „Product“ voran, zum Beispiel Product Color) und eigene Taxonomien wie Marken. Produkttyp, Sichtbarkeit und Versandklasse fehlen. Fügen Sie mit Spalte voranstellen (Prepend column) oder Spalte anhängen (Append column) eine Spalte hinzu, wählen Sie die Taxonomie unter Feld (Field) und schalten Sie die Spalte auf Aktiv (Active).
- Begriffe werden als Links zu ihren Archivseiten ausgegeben, Kategorien als Links brauchen also keinen Code. Um reinen Text auszugeben, öffnen Sie die Optionen der Spalte und aktivieren Sie Als Text anzeigen (Display as text).
- Dieselben Taxonomien stehen in der Registerkarte Filter als Dropdowns oder Mehrfachauswahlen zur Verfügung.
- Taxonomie-Spalten lassen sich nicht per Klick auf die Kopfzeile sortieren. Ein Produkt kann viele Begriffe haben, daher gibt es keinen einzelnen Wert pro Zeile, nach dem sich sortieren ließe.
- Direkt in einem Produkt eingegebene benutzerdefinierte Attribute (nicht unter Produkte > Attribute angelegt) sind keine Taxonomien. WooCommerce legt sie in einem einzigen serialisierten Meta-Feld ab, daher erscheinen sie nicht in der Liste. Verwenden Sie ein globales Attribut oder eine eigene Spalte wie oben gezeigt.
Eigene Beitragstypen wie Portfolio-Einträge
WOOT erstellt nur Tabellen mit WooCommerce-Produkten. Für ein Portfolio, Veranstaltungen oder einen anderen Beitragstyp verwenden Sie das Schwester-Plugin TableOn (posts-table.com), das auf derselben Engine aufbaut. ACF funktioniert dort genauso: eine Registerkarte Meta für einfache Felder und eigene Hooks für die oben genannten Feldtypen, die Code erfordern.
Wenn die Spalte leer bleibt
- Vergleichen Sie den Meta-Schlüssel Buchstabe für Buchstabe mit dem ACF-Feldnamen (Field Name); Schlüssel unterscheiden Groß- und Kleinschreibung und dürfen keine Leerzeichen enthalten.
- Öffnen Sie ein Produkt mit einem Wert und prüfen Sie, dass er dort gespeichert ist und nicht nur von einer Vorlage auf der Produktseite angezeigt wird.
- Stellen Sie sicher, dass die Zeile der Registerkarte Meta einen Typ hat und die Spalte in derselben Tabelle Aktiv (Active) ist, deren Shortcode auf der Seite steht.
- Eine Zelle mit einer Zahl statt eines Bildes oder Titels bedeutet ein Feld, das IDs speichert; eine Zelle mit
field_…bedeutet den Schlüssel mit Unterstrich. - Leeren Sie nach einer Änderung des Snippets den Seiten-Cache und prüfen Sie das PHP-Fehlerprotokoll, falls die ganze Tabelle nach dem Hinzufügen nicht mehr lädt.
Wenn ein Feld weiterhin nicht angezeigt wird, eröffnen Sie im WOOT-Supportforum ein Thema mit dem ACF-Feldtyp, dem Meta-Schlüssel und dem Shortcode der Tabelle.