---
title: "Základní popis struktury databáze WooCommerce ⁽ᵘᵖᵈᵃᵗᵉ 2025⁾"
id: "2988"
type: "post"
slug: "zakladni-popis-struktury-databaze-woocommerce"
published_at: "2021-11-25T15:17:14+00:00"
modified_at: "2025-03-26T07:47:42+00:00"
url: "https://ffs.cz/zakladni-popis-struktury-databaze-woocommerce/"
markdown_url: "https://ffs.cz/zakladni-popis-struktury-databaze-woocommerce.md"
excerpt: "Pozor! Jakýkoliv neodborný zásah do databáze může mít fatální následky. Bez aktuální zálohy neprovádějte žádné úpravy! Vystavujete se riziku, že poslední dostupná záloha na hostingu, která je obvykle vytvářena o půlnoci, nemusí obsahovat nejnovější obsah, objednávky ani jiná důležitá data...."
taxonomy_category:
  - "WordPress pro začátečníky"
taxonomy_post_tag:
  - "🤖 AI – korekce a formátování textů: 0 %"
  - "🧠 Human intelligence: 100 %"
---

[Přejít k obsahu](#content)
# Základní popis struktury databáze WooCommerce ⁽ᵘᵖᵈᵃᵗᵉ 2025⁾

- 🔺Dne: 25. 11. 2021
- 🟢Aktualizace: 26. 3. 2025

Jak byl napsán tento článek:

- 🤖 AI – korekce a formátování textů: 0 % 🧠 Human intelligence: 100 %

Obsah článku

Pozor! Jakýkoliv neodborný zásah do databáze může mít **fatální následky**. **Bez aktuální zálohy neprovádějte žádné úpravy!**   
  
Vystavujete se riziku, že **poslední dostupná záloha na hostingu**, která je obvykle vytvářena **o půlnoci**, nemusí obsahovat nejnovější obsah, objednávky ani jiná důležitá data. Mohli byste tak přijít o vše, co bylo změněno po poslední záloze!

WooCommerce využívá databázi WordPressu, přičemž všechny tabulky mají předponu (standardně „wp_“, lze však změnit). Databázová struktura zahrnuje jak standardní tabulky WordPressu (například posts, postmeta či comments), tak vlastní tabulky vytvořené pro potřeby e-shopu (např. pro správu objednávek, produktů, nastavení daní a dopravy). Tento článek poskytuje detailní přehled struktury, praktické příklady a doporučení, jak správně optimalizovat a udržovat databázi.

Všechny názvy databázových tabulek jsou uvedeny bez prefixu, standardně je to prefix wp_, to znamená, že tabulka se například nebude nazývat actionscheduler_actions, ale wp_actionscheduler_actions.

## Hlavní tabulky a jejich popis

Níže uvedené shrnuti nejdůležitějších tabulek použití WooCommerce:

**actionscheduler_actions**: Plánované úlohy, které se vykonávají pomocí Action Scheduler, obdobně jako WP_Cron.

**actionscheduler_claims**: Obsahuje informace o dávkách akcí, které čekají na zpracování.

**actionscheduler_groups**: Skupiny plánovaných úloh.

**actionscheduler_logs**: Logy a protokoly událostí z Action Scheduleru.

**woocommerce_sessions**: Ukládá data uživatelských relací – obsah nákupního košíku, dočasné informace o uživatelích.

**woocommerce_api_keys**: Klíče pro REST API komunikaci s WooCommerce.

**woocommerce_attribute_taxonomies**: Definuje vlastnosti (atributy) produktů.

**woocommerce_downloadable_product_permissions**: Přístupová práva ke stažitelným produktům.

**woocommerce_order_items**: Jednotlivé položky objednávek (produkty, poplatky, doprava).

**woocommerce_order_itemmeta**: Metadata položek objednávek, např. množství, cena nebo unikátní klíče.

**woocommerce_tax_rates**: Daňové sazby nastavené v administraci.

**woocommerce_tax_rate_locations**: Lokace – PSČ, města spojené s danými sazbami.

**woocommerce_shipping_zones**: Doručovací zóny definované v administraci WooCommerce.

**woocommerce_shipping_zone_locations**: Lokace přiřazené jednotlivým doručovacím zónám.

**woocommerce_shipping_zone_methods**: Metody doručení navázané na jednotlivé zóny.

**woocommerce_payment_tokens**: Ukládá platební tokeny, např. pro uložení informací o platebních kartách.

**woocommerce_payment_tokenmeta**: Metadata příslušná k platebním tokenům.

**woocommerce_log**: Interní logy a sledování událostí v WooCommerce.

**wc_webhooks**: Webhooky registrované v nastavení WooCommerce (např. pro upozornění externích aplikací).

**wc_download_log**: Protokol stažení ke stažitelným produktům.

**wc_product_meta_lookup**: Indexuje vlastnosti produktů pro rychlejší vyhledávání (filtrace, řazení podle ceny, dostupnosti apod.).

**wc_tax_rate_classes**: Definice daňových tříd, které mohou ovlivňovat výpočet daní.

**wc_reserved_stock**: Rezervace položek na skladě, aby se předešlo konfliktům při paralelních objednávkách.

## Ukládání objednávek a produktů

### Objednávky

Objednávky jsou uloženy jako vlastní typ příspěvku (shop_order) a rozděleny mezi několik tabulek:

**posts:** Základní informace o objednávce (ID, datum, stav).

**postmeta:** Detailní metadata, například celková cena, adresa zákazníka nebo uživatelské informace.

**woocommerce_order_items & woocommerce_order_itemmeta:** Položky objednávky a jejich doplňková metadata (informace o jednotlivých produktech, množství, cenu za jednotku apod.).

**comments:** Ukládají se poznámky nebo interní komentáře ke konkrétní objednávce.

### Produkty

Produkty jsou rovněž typem příspěvku a jejich data jsou rozdělena následovně:

**posts:** Základní informace – název, popis, stav publikace.

**postmeta:** Detailní nastavení produktu, jako cena, skladová dostupnost či vlastní atributy.

**wc_product_meta_lookup:** Optimalizovaný index pro rychlé vyhledávání a filtrování produktů dle jejich vlastností.

**comments:** Zde se ukládají recenze a hodnocení od zákazníků.

Chcete-li najít všechny produkty v tabulce wp_posts, můžete použít následující dotaz MySQL:

```
SELECT * FROM wp_posts WHERE post_type = 'product';
```

SQL

Chcete-li najít všechny zveřejněné produkty, můžete použít následující dotaz:

```
SELECT * FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish';
```

SQL

### Uložení variant produktů v databázi

Ve WooCommerce je každý variabilní produkt zaznamenán jako standardní záznam v tabulce `wp_posts`. Tento hlavní záznam slouží jako rodič pro své varianty. Jednotlivé varianty jsou rovněž uloženy v tabulce `wp_posts`, ale s odlišným typem příspěvku (`post_type`) nastaveným na `'product_variation'`. Propojení mezi hlavním produktem a jeho variantami je realizováno prostřednictvím sloupce `post_parent`, který u variant odkazuje na ID rodičovského produktu.

Pro získání všech variant konkrétního produktu lze použít následující SQL dotaz:​

```
/* Chcete-li najít všechny zveřejněné produkty, můžete použít následující dotaz */
SELECT * FROM wp_posts WHERE post_type = 'product_variation';

/* Pro získání všech variant konkrétního produktu lze použít následující SQL dotaz: */
SELECT * FROM wp_posts
WHERE post_parent = [ID_rodičovského_produktu]
AND post_type = 'product_variation';
```

SQL

Ve WooCommerce verze 9.0 a novějších se vztah mezi variabilním produktem a jeho variantami stále řídí sloupcem `post_parent` v tabulce `wp_posts`. Každá varianta produktu má v tomto sloupci uvedeno ID svého hlavního produktu, což vytváří hierarchii rodič-potomek. Tato struktura umožňuje efektivní organizaci a vyhledávání variant produktů ve vztahu k jejich hlavním produktům. Je důležité poznamenat, že s příchodem funkce High-Performance Order Storage (HPOS) ve verzi 9.0 byly zavedeny nové tabulky pro správu objednávek, avšak struktura ukládání produktů a jejich variant zůstala nezměněna.

### Sloupce v tabulce wp_posts související s variantami produktů

- **`post_parent`**: Tento sloupec propojuje každou variantu s jejím hlavním produktem, což zajišťuje správné přiřazení variant na vašem WooCommerce webu.​
- **`post_title`**: Obsahuje název varianty produktu, který obvykle zahrnuje specifické atributy odlišující tuto variantu, jako je velikost nebo barva.​
- **`post_status`**: Určuje stav varianty produktu (např. ‚publish‘, ‚draft‘, ‚pending‘), což je důležité pro správu viditelnosti a dostupnosti jednotlivých variant.​
- **`post_type`**: Pro varianty produktů je nastaven na ‚product_variation‘, což je odlišuje od standardních produktů s typem ‚product‘.

Pro načtení všech variant konkrétního produktu můžete použít následující SQL dotaz:​

```
SELECT * FROM wp_posts
WHERE post_parent = [ID_hlavního_produktu]
AND post_type = 'product_variation';
```

SQL

### Uložení detailů variant produktu

Ve WooCommerce jsou podrobnosti o variantách produktů ukládány v tabulce `wp_postmeta`, podobně jako hlavní data produktů. Každá varianta produktu, reprezentovaná záznamem v tabulce `wp_posts`, má odpovídající záznamy v `wp_postmeta`. Sloupec `post_id` v `wp_postmeta` odpovídá ID varianty produktu v `wp_posts`, čímž se metadata přímo propojují s konkrétní variantou.​

Pro načtení všech meta polí pro danou variantu můžete použít následující SQL dotaz:

```
SELECT * FROM wp_postmeta WHERE post_id = [ID_varianty];
```

SQL

### Metadata pro varianty produktů

Metadata pro varianty produktů obsahují podobná pole jako hlavní produkt, například _sku, total_sales, _price a další. Tyto meta pole hrají pro varianty podobnou roli jako pro standardní produkty a ukládají klíčové informace jako ceny, skladové jednotky a údaje o prodejích.

Jedinečným aspektem metadat variant produktů je ukládání atributů. Ve WooCommerce lze atributy definovat dvěma způsoby, což ovlivňuje jejich uložení v databázi:

1. Atributy vytvořené přes Produkty > Atributy: Když jsou atributy vytvořeny prostřednictvím sekce Produkty > Atributy v administraci, jsou zpracovány pomocí WordPress taxonomií. Odpovídající meta klíče pro tyto atributy v tabulce wp_postmeta mají předponu attribute_pa_. Například atribut pro barvu by byl uložen jako attribute_pa_barva. Tato předpona označuje, že atribut je globálně definovaný.
2. Atributy vytvořené na stránce úprav produktu > Atributy: Pokud jsou atributy vytvořeny přímo na stránce úprav produktu, nejsou propojeny s globálními taxonomiemi. V tomto případě mají meta klíče jednoduše předponu attribute_. Například vlastní atribut jako ‚logo‘ by byl uložen jako attribute_logo. Tyto atributy jsou specifické pro jednotlivý produkt nebo variantu a nejsou sdíleny globálně.

Tento systém ukládání atributů zůstává konzistentní i ve WooCommerce 9.0 a vyšších verzích, což umožňuje efektivní správu a vyhledávání variant produktů v databázi.

Příklad načítání všech atributů varianty produktu:

```
/*Přidání podmínky post_status = 'publish' zajistí, že budou zahrnuty pouze publikované produkty, což výrazně zmenši množství zpracovávaných dat */

SELECT 
  p.ID as product_id,
  p.post_title as product_name,
  v.ID AS variation_id,
  v.post_title as variation_name,
  pm.meta_key AS attribute_name,
  pm.meta_value AS attribute_value
FROM 
  wp_posts p
INNER JOIN 
  wp_posts v ON v.post_parent = p.ID AND v.post_type = 'product_variation'
INNER JOIN 
  wp_postmeta pm ON pm.post_id = v.ID AND pm.meta_key LIKE 'attribute_%'
WHERE 
  p.post_type = 'product'
  AND p.post_status = 'publish'
```

SQL

Tento SQL dotaz extrahuje data o produktech WooCommerce, jejich variacích a atributech těchto variací:

1. Získává základní informace o produktech (ID, název)
2. Propojuje je s jejich variacemi (ID, název variace)
3. Pro každou variaci vybírá její atributy (název atributu, hodnota atributu)

Dotaz je vytvořen tak, aby vracel jen publikované produkty, které mají alespoň jednu variaci s atributem.

### Kde jsou uloženy typy produktů v databázi WooCommerce

Typy produktů v pluginu WooCommerce označují různé klasifikace produktů podle jejich funkcí a způsobu prodeje. Základní typy produktů WooCommerce zahrnují:

- Jednoduchý (Simple) – standardní, jednotlivé produkty
- Variabilní (Variable) – produkty s variantami jako velikost nebo barva
- Seskupený (Grouped) – kolekce souvisejících produktů, které lze zakoupit samostatně
- Externí/Affiliate – produkty prodávané na jiném webu, ale inzerované ve vašem obchodě

Typy produktů jsou uloženy pomocí stejného taxonomického systému jako kategorie produktů. Jsou uloženy jako taxonomie s názvem ‚product_type‘. Informace o tom, který taxonomický termín je spojen s konkrétním produktem, je uložena v tabulkách databáze WordPress, které zpracovávají taxonomie a jejich vztahy k příspěvkům (produktům). Tyto tabulky zahrnují `wp_terms`, `wp_term_taxonomy` a `wp_term_relationships`.

Podobně jako při získávání kategorií lze informace o typu produktu získat pomocí následujícího databázového dotazu:

```
SELECT
    rel.object_id AS product_id,
    terms.name AS product_type
FROM
    est_term_relationships AS rel
INNER JOIN est_term_taxonomy AS tt
ON
    rel.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN est_terms AS terms
ON
    terms.term_id = tt.term_id
WHERE
    rel.object_id = 117486 AND tt.taxonomy = 'product_type'
LIMIT 1;
```

SQL

### Entity Relationship Diagram (ERD)

Pro lepší pochopení vztahů mezi tabulkami je doporučeno vytvářet ER diagram. Například diagram znázorni, jak je tabulka posts propojená s postmeta, woocommerce_order_items a následně s woocommerce_order_itemmeta. Pro jeho vytvoření lze použít nástroje jako MySQL Workbench nebo online služby. Diagram pomůže:

1. Vizualizovat vztahy mezi objednávkami, produkty a uživateli.
2. Identifikovat klíčová propojení pro optimalizaci dotazů.
3. Snadněji diagnostikovat případné nesrovnalosti v datech.

## Optimalizace databáze WooCommerce

Optimalizace databáze je zásadní pro udržení vysokého výkonu vašeho e-shopu. WooCommerce spolu s WordPressem ukládá řadu nadbytečných dat – od revizí, přes transients, až po systémové logy a staré relace. Pro jejich odstranění doporučuji pravidelnou údržbu, kterou můžete provádět buď automaticky pomocí pluginů, nebo manuálně.

## Doporučené pluginy a nástroje

1. **WP-Optimize** Tento bezplatný plugin odstraní nepotřebná data, revize a spamové komentáře. Umožňuje také manuální čištění a automatickou optimalizaci tabulek, což výrazně zrychlí databázi.
2. **WP-Sweep** Používá vestavěné WordPress funkce ke smazání nadbytečných revizí, metadat a dalších nepotřebných záznamů. Jeho výhodou je přehledný statistický výpis – snadno zjistíte, kolik dat bylo odstraněno.
3. **Advanced Database Cleaner** Plugin nabízí čištění databáze (odstranění revizí, konceptů, odpadních komentářů) i možnost naplánovat automatickou údržbu. Před použitím doporučuji vždy provést kompletní zálohu databáze.
4. **Manuální optimalizace prostřednictvím phpMyAdmin**
5. **actionscheduler _actions a _logs** Nezapomeňe, že na webu mam snippet, diky němuž mužete automatický čistit nepotřebné záznamy v actionscheduler _actions a _logs. Článek[zde s návodem](https://ffs.cz/dulezitost-udrzby-databaze-wordpress-pro-vykon/) .

## High-Performance Order Storage (HPOS)

S nedávnými verzemi WooCommerce byl zaveden koncept High-Performance Order Storage (HPOS). HPOS přesouvá některá data objednávek do vlastních tabulek, čímž se odlehčuje tradiční struktura postů a postmeta. Výhody HPOS:

- Zvýšení rychlosti při načítání objednávek.
- Lepší škálovatelnost při velkém objemu dat.
- Zjednodušená diagnostika a optimalizace databáze.

Doporučuji sledovat oficiální dokumentaci WooCommerce, neboť HPOS přináší změny, které mohou vyžadovat úpravy v custom řešeních.

## Nejlepší postupy pro správu dat

Správná správa dat se nejen pozitivně odrazí na výkonnosti e-shopu, ale také výrazně usnadní diagnostiku a další rozvoj. Níže uvádím několik osvědčených přístupů spolu s doporučenými nástroji, které jsou zdarma dostupné:

### Údržba a čištění

Naplánujte si pravidelnou údržbu – například každých pár měsíců zkontrolujte stav a velikost tabulek, případně odstraňte staré a nepotřebné položky. Kombinace výše uvedených pluginů v režimu automatického čištění vám pomůže udržet databázi v optimálním stavu.

### Pravidelné zálohování databáze

Používejte plugin třeba **[UpdraftPlus](https://wordpress.org/plugins/updraftplus/)** k vytvoření pravidelných záloh. Automatizované zálohování zajistí, že v případě nepředvídané události můžete rychle obnovit původní stav. Pozor na kompletní zálohy webu včetně databáze. **Většina hostingů zakazuje automatizované vlastní zálohování** v rámci webového účtu. Zálohy proto provádějte na vzdálené úložiště, například Google Drive nebo OneDrive.

**Zálohujte s rozvahou a ideálně vždy před aktualizací nebo zásadní změnou webu**, abyste měli k dispozici poslední funkční zálohu. Tyto zálohy můžete dočasně uložit lokálně na hostingu nebo rovnou na vzdálené úložiště. Pokud je vše v pořádku, zálohu z hostingu smažte a deaktivujte zálohovací plugin.

### Monitoring výkonu

Plugin **Query Monitor** sleduje pomalé SQL dotazy, chybné volání a další problémové kousky kódu. Tento nástroj vám pomůže rychle odhalit úzká místa a optimalizovat konkrétní dotazy.

### Bezpečnostní opatření

Při přímé manipulaci s databází vždy používejte funkci `**$wpdb->prepare()**` ke správnému ošetření vstupních dat. Dále doporučuji pravidelně kontrolovat oprávnění databázových uživatelů a omezit přístup pouze na autorizované IP adresy.

## Příklady užitečných SQL dotazů

### 1. Výpis objednávek za poslední měsíc

Dotaz spojuje tabulky `wp_posts` (kde jsou uloženy objednávky jako typ příspěvku `shop_order`) a `wp_postmeta` (kde jsou uloženy doplňující data, jako celková cena objednávky). Důraz je kladen na práci s indexovanými sloupci (např. `post_date` a `meta_key`):

```
SELECT p.ID, p.post_date, pm.meta_value AS total
FROM wp_posts AS p
JOIN wp_postmeta AS pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
  AND p.post_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
  AND pm.meta_key = '_order_total';
```

SQL

### 2. Rychlé vyhledání produktů podle ceny

Tento dotaz vyhledává produkty v určité cenové relaci, kde se cena ukládá v `wp_postmeta`. Použití funkce `CAST()` zajistí správné porovnání číselné hodnoty:

```
SELECT p.ID, p.post_title, meta.meta_value AS price
FROM wp_posts AS p
JOIN wp_postmeta AS meta ON p.ID = meta.post_id
WHERE p.post_type = 'product'
  AND meta.meta_key = '_price'
  AND CAST(meta.meta_value AS DECIMAL(10,2)) BETWEEN 100 AND 500;
```

SQL

### 3. Seznam položek objednávky se získáním detailů

Pro získání komplexního přehledu o položkách objednávky je třeba spojit tabulky `woocommerce_order_items` a `woocommerce_order_itemmeta`:

```
SELECT oi.order_item_id, oi.order_item_name, oim.meta_key, oim.meta_value
FROM wp_woocommerce_order_items AS oi
JOIN wp_woocommerce_order_itemmeta AS oim ON oi.order_item_id = oim.order_item_id
WHERE oi.order_id = 1234;
```

SQL

Tyto dotazy lze dále optimalizovat pomocí příslušných indexů a přizpůsobit konkrétním potřebám.

## Diagnostika a řešení problémů s databází

Při správě WooCommerce databáze se můžete setkat s následujícími problémy:

1. **Pomalé načítání:** Zkontrolujte indexy, optimalizujte dotazy a odstraňte nepotřebná data. Nástroje jako Query Monitor vám pomohou identifikovat úzká místa.
2. **Chybějící data:** Například nesprávně propojené záznamy mezi posts a postmeta mohou způsobit chyby při načítání objednávek či produktů. Proveďte validaci integrity dat.
3. **Přetížení databáze:** Při masivních objemech dat zvažte rozdělení databáze, použití HPOS a pravidelné archivování starých dat.

## Doporučení pro psaní SQL dotazů

1. **Specifikujte pouze potřebné sloupce:** Vyhýbejte se využívání `SELECT *` – vždy uveďte jen ty sloupce, které skutečně potřebujete, což významně snižuje zátěž serveru.
2. **Používejte připravené dotazy:** Při vyvolávání SQL dotazů z PHP využijte**`$wpdb->prepare()`**, abyste ochránili aplikaci před SQL injection útoky.
3. **Optimalizujte dotazy indexováním:** Ujistěte se, že sloupce používané ve WHERE klauzulích mají odpovídající indexy. Například u filtrů dle data či jiné často dotazované sloupce, jako je `post_date` nebo `meta_key`.
4. **Testujte a monitorujte výkon:** Nástroj Query Monitor vám pomuže zjistit, které dotazy jsou příliš pomalé a díky této informaci máte skvělý základ pro optimalizaci.

## Bezpečnostní doporučení

Bezpečnost databáze by měla být vždy prioritou:

1. **Pravidelné zálohování:** Před jakýmikoli zásahy nebo optimalizacemi vždy proveďte zálohu celé databáze.
2. **Bezpečný přístup:** Ujistěte se, že přístup k databázi je omezen pouze na autorizované uživatele a používejte silná hesla.
3. **Ochrana proti SQL injection:** Při psaní vlastních dotazů používejte připravené dotazy a sanitizaci vstupů.
4. **Aktualizace a monitoring:** Sledujte bezpečnostní aktualizace WordPressu a WooCommerce a pravidelně monitorujte přístupové logy.

[Zpět na blog](https://ffs.cz/blog/)

[Předchozí](https://ffs.cz/optimalizujeme-web-s-contact-form7-a-google-recaptcha/)

[Další](https://ffs.cz/vlastni-vzhled-pro-zaskrtavaci-policka-a-prepinace-v-contactform-7/)

## Napsat komentář [Zrušit odpověď na komentář](/zakladni-popis-struktury-databaze-woocommerce/#respond)
