Modul 1 · 1.2
Jak WooCommerce funguje
Modul 1: Než začnete · Doba čtení: 10 minut
Cíl lekce: Po této lekci dokážete vysvětlit, jak WooCommerce ve WordPressu funguje a kde se nacházejí produkty, objednávky, košík a naplánované úlohy.
Klíčové pojmy: typ produktu, typ příspěvku product, objednávky (HPOS), stránky obchodu, relace a košík, Store API, REST API, Action Scheduler, transakční e-maily, rozšíření
Plugin, který z Vašeho webu udělá obchod
V kurzu WordPressu (lekce 1.2 a 1.3) jste viděli, jak vzniká stránka: webový server předá požadavek PHP, PHP načte WordPress, pluginy a šablonu, získá data z databáze a vytvoří z nich HTML. WooCommerce se do tohoto procesu zapojí jako velký plugin. Přináší čtyři věci:
- Data: produkty, objednávky, zákazníky, daňové sazby, doručovací zóny.
- Stránky: obchod, košík, pokladnu a Můj účet.
- Procesy: košík pro každého návštěvníka, platby přes poskytovatele plateb, e-maily, aktualizaci skladu, naplánované úlohy.
- Vstupy pro programy: Store API a REST API.
Kdo ví, kde tyto části jsou, najde později chybu mnohem rychleji. Proto se na ně teď podíváme jednu po druhé.
Produkty: vlastní typ příspěvku
WordPress zná typy příspěvků: stránky a příspěvky jsou dva z nich (kurz WordPressu, lekce 4.2). WooCommerce přidává typ příspěvku product. Produkt je tedy, stejně jako stránka, uložen v tabulce s příspěvky a jeho další údaje (cena, SKU, sklad, hmotnost) jsou uloženy jako metadata. Kategorie a štítky produktů jsou samostatné taxonomie, oddělené od kategorií a štítků Vašeho blogu.
Každý produkt má typ produktu. V základu jsou to jednoduchý, seskupený, externí (odkaz na jiný obchod) a variabilní. K tomu můžete zapnout zaškrtávací políčka virtuální (nic se neodesílá) a ke stažení (soubor po zaplacení). Variabilní produkt má varianty, například konvici na čaj ve třech barvách; každá varianta je samostatná položka s vlastní cenou a vlastním skladem. Podrobněji se tomu věnuje modul 3.
Objednávky: vlastní tabulky (HPOS)
Dříve WooCommerce ukládal objednávky také jako příspěvky. U vytížených obchodů to bylo pomalé, protože objednávky a příspěvky blogu sdílely tutéž velkou tabulku. Proto vzniklo HPOS (High-Performance Order Storage): objednávky ve vlastních tabulkách, například wc_orders, wc_order_addresses a wc_orders_meta (s předponou tabulek Vašeho webu na začátku). Od WooCommerce 8.2 (říjen 2023) je HPOS zapnuté u každé nové instalace. Starší obchod zůstává u původního úložiště, dokud sami nepřepnete v WooCommerce > Nastavení > Pokročilé > Vlastnosti.
Proč to potřebujete vědět? Ze tří důvodů:
- Zálohy: objednávky nejsou ve Vašich souborech, ale v databázi. Záloha bez databáze je pro e-shop bezcenná (lekce 6.2).
- Rozšíření: starší rozšíření, které objednávky stále čte jako příspěvky, nefunguje s HPOS správně. WooCommerce u pluginu upozorní, pokud není kompatibilní.
- Obnovit: obnovíte-li včerejší zálohu, zmizí dnešní objednávky. U e-shopu je to mnohem horší než u blogu (lekce 6.2).
Košík: pro každého návštěvníka jiný
Běžná stránka je pro všechny návštěvníky stejná. Košík ne. Jakmile návštěvník vloží něco do košíku, WooCommerce spustí relaci: cookie (wp_woocommerce_session_ následované kódem) v prohlížeči a řádek v tabulce relací v databázi. Díky tomu e-shop při dalším požadavku ví, který košík patří tomuto návštěvníkovi.
Dva důsledky, se kterými se později znovu setkáte:
- Košík, pokladna a Můj účet se nikdy nesmí dostat do mezipaměti stránek, jinak jeden návštěvník uvidí košík jiného. WooCommerce na těchto stránkách sám posílá hlavičky, které ukládání do mezipaměti zakazují (lekce 6.4).
- E-shop, který spouští relaci u každého návštěvníka, i bez košíku, činí mezipaměť stránek celého webu zbytečnou. To je častá chyba šablon a rozšíření.
Stránky obchodu a bloky
Při instalaci vytvoří WooCommerce čtyři stránky: Obchod, Košík, Pokladna a Můj účet. Od verze 8.3 (listopad 2023) používají nové instalace pro košík a pokladnu bloky; starší obchody často ještě používají shortcody. Funguje obojí. Rozdíl je důležitý pro rozšíření: rozšíření, které něco přidává do pokladny, musí podporovat variantu, kterou používáte. Lekce 2.2 ukazuje, jak to ověřit.
Dva vstupy pro programy: Store API a REST API
WooCommerce má dva programovatelné vstupy a rozdíl mezi nimi je důležitý pro bezpečnost:
| Store API | REST API | |
|---|---|---|
| Adresa | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Pro koho | Samotný obchod (bloky v prohlížeči) a jiné prodejní frontendy | Propojení: účetnictví, sklad, aplikace |
| Je potřeba klíč? | Ne, je veřejné: produkty a ceny může číst kdokoli | Ano, API klíč s právy pro čtení nebo zápis |
| Co obsahuje | Produkty, ceny, stav skladu, košík aktuálního návštěvníka | Také objednávky, zákazníky, přehledy |
To, že je Store API veřejné, není únik dat: je to přesně to, co každý návštěvník vidí v obchodě, jen ve formě, kterou umí číst programy. Vyzkoušejte to na svém e-shopu: otevřete v prohlížeči https://shop.example.com/wp-json/wc/store/v1/products (se svou vlastní adresou) a uvidíte své produkty jako JSON. REST API by naopak mělo být bez klíče uzavřené. Lekce 2.4 kontroluje obojí.
V zákulisí: Action Scheduler a e-maily
Mnoho práce v e-shopu neprobíhá, zatímco zákazník čeká, ale později. WooCommerce k tomu používá Action Scheduler: frontu naplánovaných úloh, například zrušení nezaplacené objednávky po nastavené době, odesílání webhooků nebo aktualizaci přehledů. Frontu najdete v WooCommerce > Stav > Naplánované akce. Tyto úlohy běží na WP-Cron, který se spouští jen tehdy, když jsou na webu návštěvníci. U klidného e-shopu tak může práce zůstat nevyřízená; lekce 7.3 ukazuje, jak to vyřeší skutečný cron.
Kromě toho WooCommerce odesílá transakční e-maily: e-mail Vám při nové objednávce a e-maily zákazníkovi při přijetí, odeslání, vrácení peněz nebo založení nového účtu. Pokud nedorazí, zákazník si myslí, že je něco v nepořádku. Lekce 6.1 řeší doručitelnost.
V praxi: takto to vypadá ve WooCommerce
V administraci WordPressu Theehuis Example se po instalaci objeví tři nové nabídky: WooCommerce (objednávky, zákazníci, nastavení, stav), Produkty a Analytika (v novějších verzích někdy pod WooCommerce). V WooCommerce > Stav najdete serverové prostředí, databázové tabulky, naplánované akce a protokoly. Tuto obrazovku budete brzy potřebovat často. Postup je u každého poskytovatele hostingu stejný, protože je součástí samotného WordPressu.
Shrnutí
- WooCommerce přináší data, stránky, procesy a dva programovatelné vstupy.
- Produkty jsou vlastní typ příspěvku; objednávky jsou u nových obchodů ve vlastních tabulkách (HPOS, výchozí od verze 8.2).
- Košík funguje s relací pro každého návštěvníka; proto košík, pokladna a Můj účet nesmí být v mezipaměti.
- Store API je veřejné a ukazuje to, co vidí každý návštěvník; REST API má být bez klíče uzavřené.
- Naplánované úlohy běží přes Action Scheduler a WP-Cron; e-maily jsou součástí objednávkového procesu.
Kvíz
Úkol
Úkol A1.2: Běží tento web na WooCommerce? Zadejte doménu, zvolte ano nebo ne a napište, jaký důkaz jste viděli (například "generator" nebo "wc/store/v1"). Program načte domovskou stránku, přečte index REST (/wp-json/, pouze seznam jmenných prostorů) a vyžádá si /wp-json/wc/store/v1/products?per_page=1. WooCommerce pozná podle meta generator s WooCommerce, jmenného prostoru wc/store/v1 v indexu REST, funkčního Store API, souborů z /wp-content/plugins/woocommerce/ nebo třídy body woocommerce. Zelená: Vaše volba je správná a Váš důkaz se objevuje v hlavičkách, v HTML, v indexu REST nebo v odpovědi Store API; uvidíte pak také počet produktů a měnu. Oranžová: Vaše volba je správná, ale Váš důkaz jsme nenašli. Červená: Vaše volba není správná. Vyzkoušejte to nejprve na svém e-shopu a potom na e-shopu, který znáte. Nic se nevkládá do košíku a nic se neodesílá.
Další čtení
Kde jsou uvedeny kroky v panelu, platí pro WebOké; u jiných poskytovatelů to funguje podobně.
- Bezplatný kurz WordPress 1.2: Pod pokličkou: webový server, PHP a databáze
- Bezplatný kurz WordPress 1.3: Soubory, wp-config a databáze
- Bezplatný kurz WordPress 4.2: Stránky, příspěvky, rubriky a štítky
- High-Performance Order Storage (developer.woocommerce.com, anglicky): https://developer.woocommerce.com/docs/features/orders/high-performance-order-storage/
- Store API (developer.woocommerce.com, anglicky): https://developer.woocommerce.com/docs/apis/store-api/
- Action Scheduler (anglicky): https://actionscheduler.org/
