Wo werden WooCommerce-Produkte in der WordPress-Datenbank gespeichert?

Wo speichert WooCommerce Produktdaten in der Datenbank

Kurzfassung: WooCommerce speichert alle Produkte als Custom Post Types in wp_posts, während Attribute und Metadaten (Preis, SKU, Lagerbestand) in wp_postmeta liegen. Kategorien, Tags und Produktattribute werden in der Tabellenfamilie rund um wp_terms abgelegt. Sichtbarkeits- und Produkttyp-Flags werden als Post-Meta-Schlüssel gespeichert.

Manchmal fügen Sie neue WooCommerce-Produkte auf Ihrer Staging-Seite hinzu und möchten diese neuen Produkte einfach auf die Live-Seite übertragen, ohne andere Daten wie Bestellungen und Transaktionen zu beeinträchtigen. Wenn Sie wissen, welche Datenbanktabellen WooCommerce verwendet, wird diese Übertragung sicher und vorhersehbar – Sie kopieren nur die Zeilen mit Produktdaten und lassen die Bestellzeilen unberührt.

Dieser Artikel erfasst jede Tabelle, die WooCommerce-Produktdaten enthält, erklärt die im Alltag wichtigen Spalten und enthält kopierfertiges SQL für die häufigsten Abfragen. Falls Sie sich jemals gefragt haben, warum eine Produktänderung auf Staging nach einem teilweisen Push nicht übernommen wurde, ist die Antwort fast immer eine übersehene Tabelle.

Warum es wichtig ist zu wissen, wo Produkte gespeichert sind

Zu verstehen, wo WooCommerce-Produkte gespeichert sind, ist in mehreren praktischen Situationen nützlich:

  • Benutzerdefinierte Abfragen: Abrufen von Produktdaten über SQL-Abfragen für Reports oder benutzerdefinierte Funktionen.
  • Datenbankoptimierung: Aufräumen unnötiger Daten zur Verbesserung der Performance.
  • Fehlerbehebung: Lösen von Problemen mit fehlenden oder falschen Produktdetails.
  • Datenmigration: Verschieben von Produkten zwischen verschiedenen WordPress-Installationen, ohne Bestell- oder Kundendaten anzutasten.
  • Fehlende Attribute debuggen: Wenn die Farbe oder Größe eines Produkts im Frontend nicht erscheint, spart das Wissen darüber, welche Taxonomie-Tabelle zu prüfen ist, erhebliche Debugging-Zeit.

Wichtige Tabellen, in denen WooCommerce-Produktdaten gespeichert sind

WooCommerce speichert Produktdaten hauptsächlich in zwei Tabellen:

  • wp_posts – Enthält Produkteinträge mit dem Post-Typ product oder product_variation.
WooCommerce-Produktdetails über die wp_posts-Tabelle finden
  • wp_postmeta – Speichert zusätzliche Metadaten für jedes Produkt, verknüpft über post_id (Produkt-ID).
Produktdetail über die wp_postmeta-Tabelle finden

Tabellenübersicht

Die folgende Tabelle ordnet jeden zentralen Speicherbereich dem zu, was er enthält, sowie den Spalten, die in Abfragen oder Migrationen am häufigsten benötigt werden:

Tabelle Was sie speichert Wichtige Spalten
wp_posts Jedes Produkt und jede Variante als Zeile ID, post_title, post_type = 'product', post_status, post_modified
wp_postmeta Preis, SKU, Lagerbestand, Gewicht, Maße – eine Zeile pro Schlüssel und Produkt post_id, meta_key, meta_value
wp_terms Kategorie- und Tag-Namen, Attributbezeichnungen term_id, name, slug
wp_term_taxonomy Legt fest, ob ein Term eine Kategorie, ein Tag oder ein Attribut ist term_taxonomy_id, taxonomy, description
wp_term_relationships Verknüpft jedes Produkt (object_id) mit seinen Terms object_id, term_taxonomy_id
wp_termmeta Zusätzliche Metadaten zu Terms term_id, meta_key, meta_value
wp_woocommerce_attribute_taxonomies Globale Attributdefinitionen (z. B. Farbe, Größe) attribute_id, attribute_name, attribute_type

Praxisbeispiel: ein Produkt mit Preis und Lagerbestand abrufen

Die folgende Abfrage verbindet wp_posts mit wp_postmeta, um Preis und Lagerstatus für ein einzelnes Produkt auszulesen. Ersetzen Sie 12345 durch den ID-Wert des Produkts aus wp_posts:

SELECT
  p.ID,
  p.post_title,
  MAX(CASE WHEN pm.meta_key = '_price'        THEN pm.meta_value END) AS price,
  MAX(CASE WHEN pm.meta_key = '_stock_status' THEN pm.meta_value END) AS stock_status
FROM wp_posts p
JOIN wp_postmeta pm ON pm.post_id = p.ID
WHERE p.ID = 12345
  AND p.post_type = 'product'
GROUP BY p.ID, p.post_title;

In unseren Tests mit WooCommerce 9.x ist der Meta-Schlüssel _price immer gefüllt, selbst wenn das Produkt keinen expliziten Sale-Preis hat – er spiegelt dann den regulären Preis wider. Aus der Erfahrung des WP STAGING-Supports ist die häufigste Verwirrungsquelle die Annahme, WooCommerce verwende eigene, vollständig getrennte Tabellen für Produkte. Das tut es nicht: Es erweitert wp_posts über das Custom-Post-Type-System, sodass jedes Produkt eine Post-Zeile mit dem post_type-Wert product ist.

Schnellreferenz: Finden Sie, was Sie brauchen

Verwenden Sie diese Tabelle, um direkt zur richtigen Tabelle und Spalte zu gelangen, ohne die vollständige Schema-Dokumentation zu lesen:

Ich möchte … Tabelle Filter
Alle Produkte auflisten wp_posts post_type = 'product'
Den Preis eines Produkts finden wp_postmeta meta_key = '_price'
Den Sale-Preis eines Produkts finden wp_postmeta meta_key = '_sale_price'
Den Lagerstatus prüfen wp_postmeta meta_key = '_stock_status'
Die SKU eines Produkts finden wp_postmeta meta_key = '_sku'
Produktkategorien eines Produkts auflisten wp_term_relationshipswp_term_taxonomywp_terms taxonomy = 'product_cat'
Prüfen, ob ein Produkt hervorgehoben ist wp_term_relationships Term-Slug featured in product_visibility
Alle Varianten eines Produkts finden wp_posts post_type = 'product_variation' und post_parent = <Produkt-ID>

Tabellen mit Produktkategorien, Tags und Attributen

Zusätzlich zu den Kerntabellen für Produkte verwendet WooCommerce mehrere Taxonomie-Tabellen, um Produkttypen, Kategorien, Unterkategorien, Tags und Attribute zu verwalten:

  • wp_terms – Speichert Produktkategorien und Tags.
  • wp_termmeta – Speichert Metadaten für Produkt-Terms.
  • wp_term_taxonomy – Definiert den Taxonomie-Typ (z. B. Kategorie, Tag, Attribut).
  • wp_term_relationships – Verknüpft Produkte mit ihren Kategorien und Attributen.
  • wp_woocommerce_termmeta – Speichert zusätzliche WooCommerce-spezifische Term-Daten.
  • wp_woocommerce_attribute_taxonomies – Verwaltet speziell die Produktattribute.

Wenn ein Produktattribut im Frontend nicht korrekt angezeigt wird, prüfen Sie sowohl wp_term_relationships (um zu bestätigen, dass das Produkt mit dem richtigen Term verknüpft ist) als auch wp_term_taxonomy (um zu bestätigen, dass die Spalte taxonomy mit dem erwarteten Attribut-Slug übereinstimmt).

WooCommerce-Produkttypen und Sichtbarkeit

WooCommerce verwaltet verschiedene Produkttypen über die Taxonomie product_type, die folgende Standardoptionen enthält:

  • simple – Ein Standardprodukt ohne Varianten.
  • grouped – Eine Sammlung verwandter Produkte.
  • variable – Ein Produkt mit mehreren Varianten.
  • external – Ein auf einer externen Website verkauftes Produkt.

Seit WooCommerce 3+ verwaltet eine neue Taxonomie namens product_visibility:

  • Sichtbarkeit in Suche und Katalog – Verwendet Terms wie exclude-from-search und exclude-from-catalog.
  • Hervorgehobene Produkte – Identifiziert durch den Term featured.
  • Lagerstatus – Verwendet outofstock, um nicht verfügbare Produkte zu kennzeichnen.
  • Bewertungen – Terms wie rated-1 bis rated-5 kategorisieren Produktbewertungen.

Jedes Produktattribut wird als eigene Custom Taxonomy gespeichert, was die dynamische Kategorisierung und Filterung von Produkten erleichtert.

Häufige Operationen

Produkte sicher per Post-Typ stapelweise löschen

Um alle Produkte aus einer Test- oder Seed-Datenbank zu entfernen, sprechen Sie wp_posts über den Post-Typ an und bereinigen Sie die zugehörigen Postmeta-Zeilen im selben Vorgang:

-- Remove postmeta first (avoids orphaned rows)
DELETE pm
FROM wp_postmeta pm
JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.post_type IN ('product', 'product_variation');

-- Then remove the product and variation rows
DELETE FROM wp_posts
WHERE post_type IN ('product', 'product_variation');

⚠️ Führen Sie dies immer zuerst gegen eine Staging-Datenbank aus. Dies löscht dauerhaft alle Produktzeilen und ihre Metadaten. Bestelltabellen werden nicht angetastet.

WooCommerce-Produkte von Staging nach Live migrieren

Wenn Sie nur Produkte – keine Bestellungen – aus einer Staging-Umgebung übertragen, ist die minimale Tabellenmenge:

  • wp_posts – Zeilen mit post_type IN ('product', 'product_variation')
  • wp_postmeta – Zeilen, deren post_id zu einem Produkt oder einer Variante gehört
  • wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships – Zeilen, die mit product_cat, product_tag und benutzerdefinierten Attribut-Taxonomien verknüpft sind
  • wp_woocommerce_attribute_taxonomies – falls Sie benutzerdefinierte globale Attributdefinitionen in der Quellumgebung haben

Lassen Sie alle wp_woocommerce_order*– und wp_wc_order*-Tabellen beim Push außen vor – sie einzubeziehen würde Live-Kundenbestellungen mit Staging-Daten überschreiben.

Testproduktdaten zurücksetzen

Nachdem Sie einen Staging-Shop mit Testprodukten befüllt haben, setzen Sie ihn auf einen sauberen Zustand zurück, indem Sie mit der obigen Abfrage Zeilen mit post_type = 'product' löschen. Der selektive Push von WP STAGING lässt Sie zudem festlegen, welche Post-Typen ein- oder ausgeschlossen werden, sodass Sie echte Produkte von Staging nach Live übertragen können, ohne rohes SQL zu schreiben.

Best Practices für das Kopieren von Produktdaten auf eine Live-Seite

Wenn Sie neue Produkte von einer Staging-Seite auf eine Live-Seite übertragen, schützen Sie Bestellungen und Kundendaten, indem Sie diese Schritte befolgen:

  1. Sichern Sie die Live-Datenbank. Exportieren Sie vor jedem Push einen vollständigen Snapshot, damit Sie sofort wiederherstellen können, falls etwas schiefgeht.
  2. Kopieren Sie nur relevante Tabellen. Konzentrieren Sie sich auf wp_posts, wp_postmeta und die Taxonomie-Tabellen.
  3. Schließen Sie bestellbezogene Tabellen aus. Vermeiden Sie Tabellen mit dem Präfix wp_woocommerce_, sofern Sie nicht ausdrücklich Bestelldaten migrieren möchten.
  4. Verwenden Sie ein Migrationstool. Plugins wie WP STAGING übernehmen selektive Tabellen-Pushes automatisch, einschließlich Suchen-und-Ersetzen in serialisierten Daten für URL-Unterschiede zwischen Umgebungen.
  5. Prüfen Sie zuerst auf Staging. Führen Sie eine reine Leseabfrage gegen die Staging-Datenbank aus, um die erwarteten Produktzeilenzahlen vor dem Push zu bestätigen.

Fazit

WooCommerce-Produkte werden hauptsächlich in wp_posts und wp_postmeta gespeichert, während Kategorien, Attribute und Sichtbarkeitseinstellungen in zugehörigen Taxonomie-Tabellen verwaltet werden. Diese Struktur zu verstehen, hilft dabei, Produktdaten sicher zu migrieren, ohne den Live-Shop-Betrieb zu beeinträchtigen.

Quellen:

Verwandte Artikel

Rene Hermenau

Autor: Rene Hermenau

Über den Autor: René Hermenau ist Gründer von WP STAGING. Er arbeitet an WordPress-Backups, Staging, Migrationen, Datenbankverarbeitung und sicheren Deployment-Workflows.