Gdzie produkty WooCommerce są przechowywane w bazie danych WordPressa?

Gdzie WooCommerce przechowuje dane produktów w bazie danych

W skrócie: WooCommerce przechowuje wszystkie produkty jako custom post types w tabeli wp_posts, a atrybuty i metadane (cena, SKU, stan magazynowy) w wp_postmeta. Kategorie, tagi i atrybuty produktów znajdują się w rodzinie tabel wp_terms. Flagi widoczności i typu produktu są przechowywane jako klucze post meta.

Czasami dodajesz nowe produkty WooCommerce w witrynie stagingowej i chcesz po prostu przenieść te nowe produkty do witryny produkcyjnej, nie wpływając na inne dane, takie jak zamówienia i transakcje. Wiedza o tym, których tabel bazy danych używa WooCommerce, sprawia, że taki transfer jest bezpieczny i przewidywalny — kopiujesz tylko wiersze zawierające dane produktów i pozostawiasz wiersze zamówień nietknięte.

Ten artykuł mapuje każdą tabelę przechowującą dane produktów WooCommerce, wyjaśnia kolumny istotne na co dzień i zawiera gotowy do skopiowania kod SQL do najczęstszych zapytań. Jeśli kiedykolwiek zastanawiałeś się, dlaczego zmiana produktu na stagingu nie została przeniesiona po częściowym pushu, odpowiedzią jest niemal zawsze pominięta tabela.

Dlaczego znajomość miejsca przechowywania produktów ma znaczenie

Zrozumienie, gdzie przechowywane są produkty WooCommerce, jest przydatne w kilku praktycznych sytuacjach:

  • Niestandardowych zapytaniach: Pobieraniu danych produktów za pomocą zapytań SQL do raportów lub niestandardowych funkcji.
  • Optymalizacji bazy danych: Czyszczeniu zbędnych danych w celu poprawy wydajności.
  • Rozwiązywaniu problemów: Rozwiązywaniu problemów z brakującymi lub nieprawidłowymi szczegółami produktu.
  • Migracji danych: Przenoszeniu produktów między różnymi instalacjami WordPressa bez naruszania danych zamówień ani klientów.
  • Debugowaniu brakujących atrybutów: Gdy kolor lub rozmiar produktu nie pojawia się na front-endzie, wiedza o tym, którą tabelę taksonomii sprawdzić, oszczędza sporo czasu debugowania.

Kluczowe tabele przechowujące dane produktów WooCommerce

WooCommerce przechowuje dane produktów głównie w dwóch tabelach:

  • wp_posts – Zawiera wpisy produktów z post type product lub product_variation.
Znajdź szczegóły produktów WooCommerce za pomocą tabeli wp_posts
  • wp_postmeta – Przechowuje dodatkowe metadane dla każdego produktu, powiązane przez post_id (ID produktu).
Znajdź szczegóły produktu za pomocą tabeli wp_postmeta

Przegląd tabel

Poniższa tabela przyporządkowuje każdy główny obszar przechowywania do tego, co zawiera, oraz do kolumn najczęściej potrzebnych w zapytaniach lub migracjach:

Tabela Co przechowuje Kluczowe kolumny
wp_posts Każdy produkt i wariant jako wiersz ID, post_title, post_type = 'product', post_status, post_modified
wp_postmeta Cena, SKU, stan magazynowy, waga, wymiary — jeden wiersz na klucz i produkt post_id, meta_key, meta_value
wp_terms Nazwy kategorii i tagów, etykiety atrybutów term_id, name, slug
wp_term_taxonomy Określa, czy termin jest kategorią, tagiem czy atrybutem term_taxonomy_id, taxonomy, description
wp_term_relationships Łączy każdy produkt (object_id) z jego terminami object_id, term_taxonomy_id
wp_termmeta Dodatkowe metadane przypisane do terminów term_id, meta_key, meta_value
wp_woocommerce_attribute_taxonomies Globalne definicje atrybutów (np. Kolor, Rozmiar) attribute_id, attribute_name, attribute_type

Przykład praktyczny: pobranie produktu wraz z jego ceną i stanem magazynowym

Poniższe zapytanie łączy wp_posts z wp_postmeta, aby pobrać cenę i status magazynowy pojedynczego produktu. Zastąp 12345 wartością ID produktu z tabeli 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;

W naszych testach z WooCommerce 9.x klucz meta _price jest zawsze wypełniony, nawet gdy produkt nie ma jawnej ceny promocyjnej — odzwierciedla wtedy cenę regularną. Z doświadczenia wsparcia WP STAGING najczęstszym źródłem nieporozumień jest założenie, że WooCommerce używa własnych, całkowicie oddzielnych tabel dla produktów. Tak nie jest: rozszerza wp_posts poprzez system custom post types, więc każdy produkt jest wierszem wpisu z wartością post_type równą product.

Szybki przewodnik: znajdź to, czego potrzebujesz

Skorzystaj z tej tabeli, aby przejść bezpośrednio do właściwej tabeli i kolumny bez czytania całej dokumentacji schematu:

Chcę … Tabela Filtr
Wyświetlić listę wszystkich produktów wp_posts post_type = 'product'
Znaleźć cenę produktu wp_postmeta meta_key = '_price'
Znaleźć cenę promocyjną produktu wp_postmeta meta_key = '_sale_price'
Sprawdzić status magazynowy wp_postmeta meta_key = '_stock_status'
Znaleźć SKU produktu wp_postmeta meta_key = '_sku'
Wyświetlić kategorie produktu wp_term_relationshipswp_term_taxonomywp_terms taxonomy = 'product_cat'
Sprawdzić, czy produkt jest polecany wp_term_relationships slug terminu featured w product_visibility
Znaleźć wszystkie warianty produktu wp_posts post_type = 'product_variation' oraz post_parent = <ID produktu>

Tabele przechowujące kategorie, tagi i atrybuty produktów

Oprócz głównych tabel produktów WooCommerce wykorzystuje kilka tabel związanych z taksonomiami do zarządzania typami produktów, kategoriami, podkategoriami, tagami i atrybutami:

  • wp_terms – Przechowuje kategorie i tagi produktów.
  • wp_termmeta – Przechowuje metadane terminów produktów.
  • wp_term_taxonomy – Definiuje typ taksonomii (np. kategoria, tag, atrybut).
  • wp_term_relationships – Łączy produkty z ich kategoriami i atrybutami.
  • wp_woocommerce_termmeta – Przechowuje dodatkowe dane terminów specyficzne dla WooCommerce.
  • wp_woocommerce_attribute_taxonomies – Zarządza w szczególności atrybutami produktów.

Gdy atrybut produktu nie wyświetla się poprawnie na front-endzie, sprawdź zarówno wp_term_relationships (aby potwierdzić, że produkt jest powiązany z właściwym terminem), jak i wp_term_taxonomy (aby potwierdzić, że kolumna taxonomy odpowiada oczekiwanemu slugowi atrybutu).

Typy produktów WooCommerce i widoczność

WooCommerce obsługuje różne typy produktów przy użyciu taksonomii product_type, która zawiera następujące domyślne opcje:

  • simple – Standardowy produkt bez wariantów.
  • grouped – Kolekcja powiązanych produktów.
  • variable – Produkt z wieloma wariantami.
  • external – Produkt sprzedawany w zewnętrznej witrynie.

Od WooCommerce 3+ nową taksonomią o nazwie product_visibility zarządzane są:

  • Widoczność w wyszukiwaniu i katalogu – Używa terminów takich jak exclude-from-search i exclude-from-catalog.
  • Polecane produkty – Identyfikowane terminem featured.
  • Status zapasów – Używa outofstock do oznaczania niedostępnych produktów.
  • Oceny – Terminy takie jak rated-1 do rated-5 kategoryzują recenzje produktów.

Każdy atrybut produktu jest przechowywany jako niestandardowa taksonomia, co ułatwia dynamiczne kategoryzowanie i filtrowanie produktów.

Typowe operacje

Bezpieczne masowe usuwanie produktów według post type

Aby usunąć wszystkie produkty z testowej lub wypełnionej danymi bazy danych, wybierz wp_posts według post type i wyczyść powiązane wiersze postmeta w tej samej operacji:

-- 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');

⚠️ Zawsze uruchamiaj to najpierw na bazie danych stagingowej. Trwale usuwa to wszystkie wiersze produktów i ich metadane. Nie narusza tabel zamówień.

Migracja produktów WooCommerce ze stagingu na produkcję

Gdy przenosisz tylko produkty — a nie zamówienia — ze środowiska stagingowego, minimalny zestaw tabel do uwzględnienia to:

  • wp_posts — wiersze, gdzie post_type IN ('product', 'product_variation')
  • wp_postmeta — wiersze, których post_id należy do produktu lub wariantu
  • wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships — wiersze powiązane z product_cat, product_tag i niestandardowymi taksonomiami atrybutów
  • wp_woocommerce_attribute_taxonomies — jeśli w środowisku źródłowym masz niestandardowe globalne definicje atrybutów

Pomiń przy pushu wszystkie tabele wp_woocommerce_order* i wp_wc_order* — ich uwzględnienie nadpisałoby zamówienia klientów na produkcji danymi ze stagingu.

Resetowanie testowych danych produktów

Po wypełnieniu sklepu stagingowego produktami testowymi przywróć go do czystego stanu, usuwając wiersze, gdzie post_type = 'product', za pomocą powyższego zapytania. Selektywny push WP STAGING pozwala również określić, które post types uwzględnić lub wykluczyć, dzięki czemu możesz przenosić prawdziwe produkty ze stagingu na produkcję bez pisania surowego SQL.

Najlepsze praktyki kopiowania danych produktów do witryny produkcyjnej

Przenosząc nowe produkty z witryny stagingowej do witryny produkcyjnej, chroń zamówienia i dane klientów, wykonując następujące kroki:

  1. Wykonaj kopię zapasową produkcyjnej bazy danych. Wyeksportuj pełną migawkę przed każdym pushem, aby móc natychmiast przywrócić dane, jeśli coś pójdzie nie tak.
  2. Kopiuj tylko odpowiednie tabele. Skup się na wp_posts, wp_postmeta oraz tabelach związanych z taksonomiami.
  3. Wyklucz tabele związane z zamówieniami. Unikaj tabel z prefiksem wp_woocommerce_, chyba że celowo zamierzasz migrować dane zamówień.
  4. Użyj narzędzia migracyjnego. Wtyczki takie jak WP STAGING automatycznie obsługują selektywne pushe tabel, w tym wyszukiwanie i zamianę w danych serializowanych dla różnic w adresach URL między środowiskami.
  5. Najpierw zweryfikuj na stagingu. Uruchom zapytanie tylko do odczytu na bazie danych stagingowej, aby potwierdzić oczekiwaną liczbę wierszy produktów przed rozpoczęciem pushu.

Podsumowanie

Produkty WooCommerce są przechowywane głównie w wp_posts i wp_postmeta, podczas gdy kategorie, atrybuty i ustawienia widoczności są zarządzane w powiązanych tabelach taksonomii. Zrozumienie tej struktury pomaga bezpiecznie migrować dane produktów bez wpływu na działanie sklepu produkcyjnego.

Źródła:

Powiązane artykuły

Rene Hermenau

Autor: Rene Hermenau

O autorze: René Hermenau jest założycielem WP STAGING. Zajmuje się kopiami zapasowymi WordPressa, środowiskami stagingowymi, migracjami, obsługą baz danych oraz bezpiecznymi procesami wdrażania.