Modul 1 · 1.2
Sådan fungerer WooCommerce
Modul 1: Før du starter · Læsetid: 10 minutter
Læringsmål: Efter denne lektion kan du forklare, hvordan WooCommerce fungerer i WordPress, og hvor produkter, ordrer, kurven og de planlagte opgaver ligger.
Centrale begreber: produkttype, indholdstypen product, ordrer (HPOS), butikssider, session og kurv, Store API, REST API, Action Scheduler, transaktionelle mails, udvidelser
Et plugin, der gør dit websted til en butik
I WordPress-kurset (lektion 1.2 og 1.3) så du, hvordan en side bliver til: Webserveren giver forespørgslen videre til PHP, PHP indlæser WordPress, plugins og tema, henter data fra databasen og laver HTML ud af dem. WooCommerce går ind i den proces som et stort plugin. Det bringer fire ting med sig:
- Data: produkter, ordrer, kunder, momssatser, forsendelseszoner.
- Sider: butikken, kurven, kassen og Min konto.
- Processer: en kurv pr. besøgende, betalinger via en betalingsudbyder, mails, opdatering af lager, planlagte opgaver.
- Indgange for programmer: Store API og REST API.
Hvis du ved, hvor disse dele sidder, kan du senere finde en fejl meget hurtigere. Derfor ser vi nu på dem én ad gangen.
Produkter: en egen indholdstype
WordPress kender indholdstyper (post types): sider og indlæg er to af dem (WordPress-kurset lektion 4.2). WooCommerce tilføjer indholdstypen product. Et produkt ligger altså, ligesom en side, i tabellen med indlæg, med sine ekstra data (pris, varenummer/SKU, lager, vægt) som metadata. Kategorier og tags for produkter er egne taksonomier, adskilt fra dem på din blog.
Hvert produkt har en produkttype. I kernen er det simpel, grupperet, ekstern (et link til en anden butik) og variabel. Afkrydsningsfelterne virtuel (intet at sende) og downloadbar (en fil efter betaling) kan du slå til ved siden af. Et variabelt produkt har varianter, for eksempel en tekande i tre farver; hver variant er et selvstændigt element med egen pris og eget lager. Modul 3 går i dybden med det.
Ordrer: egne tabeller (HPOS)
Tidligere gemte WooCommerce også ordrer som indlæg. I travle butikker blev det langsomt, fordi ordrer og blogindlæg delte den samme store tabel. Derfor kom HPOS (High-Performance Order Storage): ordrer i egne tabeller, som wc_orders, wc_order_addresses og wc_orders_meta (med dit websteds tabelpræfiks foran). Siden WooCommerce 8.2 (oktober 2023) er HPOS slået til i alle nye installationer. En ældre butik bliver på den gamle lagring, indtil du selv skifter under WooCommerce > Indstillinger > Avanceret > Funktioner.
Hvorfor skal du vide det? Af tre grunde:
- Backups: Ordrer ligger ikke i dine filer, men i databasen. En backup uden database er værdiløs for en shop (lektion 6.2).
- Udvidelser: En ældre udvidelse, der stadig læser ordrer som indlæg, fungerer ikke ordentligt med HPOS. WooCommerce advarer ved pluginet, hvis det ikke er kompatibelt.
- Gendannelse: Gendanner du en backup fra i går, forsvinder dagens ordrer. Det er langt værre for en shop end for en blog (lektion 6.2).
Kurven: forskellig for hver besøgende
En almindelig side er ens for alle besøgende. Det er kurven ikke. Så snart en besøgende lægger noget i kurven, starter WooCommerce en session: en cookie (wp_woocommerce_session_ efterfulgt af en kode) i browseren og en række i en sessionstabel i databasen. Sådan ved shoppen ved næste forespørgsel, hvilken kurv der hører til denne besøgende.
To konsekvenser, du møder igen senere:
- Kurv, kasse og Min konto må aldrig havne i en sidecache, ellers ser den ene besøgende den andens kurv. WooCommerce sender selv headers med på de sider, der forbyder caching (lektion 6.4).
- En shop, der starter en session for hver besøgende, også uden kurv, gør sidecachen for hele webstedet nytteløs. Det er en almindelig fejl i temaer og udvidelser.
Butikssiderne og blokkene
Ved installationen opretter WooCommerce fire sider: Webshop, Kurv, Kasse og Min konto. Siden version 8.3 (november 2023) bruger nye installationer blokke til kurv og kasse; ældre butikker bruger ofte stadig shortcodes. Begge dele virker. Forskellen er vigtig for udvidelser: En udvidelse, der tilføjer noget til kassen, skal understøtte den variant, du bruger. Lektion 2.2 viser, hvordan du tjekker det.
To indgange for programmer: Store API og REST API
WooCommerce har to programmerbare indgange, og forskellen er vigtig for sikkerheden:
| Store API | REST API | |
|---|---|---|
| Adresse | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Til hvem | Butikken selv (blokkene i browseren) og andre butiksfronter | Integrationer: bogføring, lager, apps |
| Kræver nøgle? | Nej, offentlig: alle kan læse produkter og priser | Ja, en API-nøgle med læse- eller skriverettigheder |
| Hvad indeholder den | Produkter, priser, lagerstatus, den aktuelle besøgendes kurv | Også ordrer, kunder, rapporter |
At Store API er offentlig, er ikke et læk: Det er præcis det, alle besøgende ser i butikken, bare i en form, som programmer kan læse. Prøv det med din egen shop: Åbn https://shop.example.com/wp-json/wc/store/v1/products i din browser (med din egen adresse), så ser du dine produkter som JSON. REST API skal derimod være lukket uden nøgle. Lektion 2.4 tjekker begge.
Bag kulisserne: Action Scheduler og mails
Meget arbejde i en shop sker ikke, mens kunden venter, men senere. Til det bruger WooCommerce Action Scheduler: en kø af planlagte opgaver, for eksempel at annullere en ubetalt ordre efter den indstillede tid, sende webhooks eller opdatere rapporter. Du ser køen under WooCommerce > Status > Skemalagte handlinger. Opgaverne kører på WP-Cron, som kun kører, når der er besøgende. I en stille shop kan arbejde derfor blive liggende; lektion 7.3 viser, hvordan en rigtig cron løser det.
Desuden sender WooCommerce transaktionelle mails: en mail til dig ved en ny ordre og mails til kunden ved modtagelse, afsendelse, refusion eller en ny konto. Kommer de ikke frem, tror kunden, at noget er galt. Lektion 6.1 sørger for leveringen.
I praksis: sådan ser det ud i WooCommerce
I WordPress-administrationen hos Theehuis Example dukker der efter installationen tre nye menuer op: WooCommerce (ordrer, kunder, indstillinger, status), Varer og Analytics (i nyere versioner nogle gange under WooCommerce). Under WooCommerce > Status finder du servermiljøet, databasetabellerne, de skemalagte handlinger og logfilerne. Den skærm får du ofte brug for. Trinene er de samme hos alle webhoster, fordi de ligger i selve WordPress.
Opsummering
- WooCommerce bringer data, sider, processer og to programmerbare indgange med sig.
- Produkter er en egen indholdstype; ordrer ligger i nye butikker i egne tabeller (HPOS, standard siden 8.2).
- Kurven fungerer med en session pr. besøgende; derfor må kurv, kasse og Min konto ikke ligge i cachen.
- Store API er offentlig og viser det, alle besøgende ser; REST API skal være lukket uden nøgle.
- Planlagte opgaver kører via Action Scheduler og WP-Cron; mails er en del af bestillingsprocessen.
Quiz
Opgave
Opgave A1.2: Kører dette websted på WooCommerce? Indtast et domæne, vælg ja eller nej, og skriv, hvilket bevis du så (for eksempel "generator" eller "wc/store/v1"). Programmet henter forsiden, læser REST-indekset (/wp-json/, kun listen med namespaces) og henter /wp-json/wc/store/v1/products?per_page=1. Det genkender WooCommerce på en meta generator med WooCommerce, namespacet wc/store/v1 i REST-indekset, en fungerende Store API, filer fra /wp-content/plugins/woocommerce/ eller body-klassen woocommerce. Grøn: Dit valg er rigtigt, og dit bevis findes i headers, HTML, REST-indekset eller svaret fra Store API; du ser så også antallet af produkter og valutaen. Orange: Dit valg er rigtigt, men vi kan ikke finde dit bevis. Rød: Dit valg er forkert. Prøv det først på din egen shop og derefter på en shop, du kender. Der bliver ikke lagt noget i en kurv, og der bliver ikke sendt noget.
Læs videre
Hvor trin foregår i et kontrolpanel, gælder de for WebOké; hos andre udbydere fungerer det på samme måde.
- Gratis WordPress-kursus 1.2: Under motorhjelmen: webserver, PHP og database
- Gratis WordPress-kursus 1.3: Filer, wp-config og databasen
- Gratis WordPress-kursus 4.2: Sider, indlæg, kategorier og tags
- High-Performance Order Storage (developer.woocommerce.com, engelsk): https://developer.woocommerce.com/docs/features/orders/high-performance-order-storage/
- Store API (developer.woocommerce.com, engelsk): https://developer.woocommerce.com/docs/apis/store-api/
- Action Scheduler (engelsk): https://actionscheduler.org/
