WooCommerce e-commerce tracking
WooCommerce-fanen virker nu. Den har siden 1.5 kun indeholdt en "kommer snart"-besked; class-trackwp-woocommerce.php var en tom stub og assets/js/woocommerce.js indeholdt ingen kode.
- Ny: Shop-begivenhederne
view_item,add_to_cart,begin_checkoutogpurchase. Slået fra som standard — det ændrer hvad der sendes til Google og Meta, så det skal være et bevidst valg - Ny: Begivenhederne oprettes i den almindelige liste på fanen Begivenheder, ikke i en separat opsætning. Dermed arver de platform-routing (send_to), Meta-event-mapping, Google Ads-label, leveringsloggen og dedup-tilstanden. Kun
purchaseer som standard routet til Google Ads — en konverteringsupload skal være et aktivt valg - Ny: Ny trigger-type "WooCommerce" der styres fra WooCommerce-fanen. Den binder intet i browseren, men sidebetingelser (fx Page URL) virker stadig, så en shop-begivenhed kan afgrænses til bestemte sider
- Ny: Valg af konverteringsværdi: inkl. moms og fragt, uden moms, uden fragt, eller uden moms og fragt. Grundlaget gælder både ordre- og kurvværdi og bestemmer også om produktpriserne sendes med eller uden moms — alle fire begivenheder bruger samme grundlag
- Ny: Valg af produkt-ID: WooCommerce-ID eller SKU, så
item_idkan matche Merchant Center-feedet. Både serveren og browseren følger valget, så samme produkt ikke optræder under to id'er - Ny: Produktdata sendes med som GA4
items(item_id, item_name, item_category til item_category5, item_variant, quantity, price, discount) og som Metacontentsmedcontent_typeogorder_id - Ny: Priser sendes som pris FØR rabat med rabatten i
discount, hvilket er GA4's egen model. At lægge rabatten ind i prisen fjerner forskellen på en billig vare og en nedsat vare - Ny:
purchasesendes fra ordrebekræftelsessiden, hvor klient-ID, session og annonce-cookies stadig findes. En server-side afsendelse ved statusskift ville køre uden for den besøgendes request, hvor GA4 opfinder et nyt client_id og hvert salg bliver til en ny Direct-bruger. Prisen er ordrer hvor kunden aldrig når siden - Ny: Ordrenummeret bruges som
transaction_id, ikke et tilfældigt event-id. Det er det GA4 og Google Ads deduplikerer på, og det der gør en senere refusion mulig at koble til ordren - Ny: Ordren tælles kun én gang. Et flag på ordren forhindrer gentagelse ved genindlæsning (HPOS-sikkert via CRUD-API'et, aldrig
update_post_meta), og et ekstra værn i browseren fanger det tilfælde hvor ordrebekræftelsen genbruges fra browserens egen cache — WooCommerce sender den med kortmax-age, så serveren aldrig bliver spurgt. GA4 og Ads deduplikerer på ordrenummer, men Meta gør ikke, så uden det værn blev salget talt to gange dér - Ny: Ordrebekræftelsen kontrolleres med ordrenøglen (
hash_equals). Ordre-id'et står i URL'en, så uden den kontrol kunne enhver besøgende afspille en fremmed ordre ind i butikkens statistik - Ny:
add_to_cartdækker alle tre veje WooCommerce har: klassisk formularindsendelse (registreres server-side og afspilles ved næste sidevisning), klassisk AJAX i produktlister, og Cart/Checkout-blokkene - Ny: Blok-understøttelse aflytter svarene fra Store API'et (
/wc/store/v1/cart/*) i stedet for at læse et JavaScript-globalt objekt. WooCommerce har flyttet blokkene til Interactivity API'et, ogwindow.wp.datafindes ikke længere på en aktuel installation — verificeret mod WooCommerce 11 og WordPress 7.1. Antallet rapporteres som ændringen, ikke som den nye total, og nedjustering eller fjernelse udløser ingen begivenhed - Fix: GTM-snippet'et pushede
event: 'gtm.start'i stedet for Googlesevent: 'gtm.js'. Alle "All Pages"-triggere i GTM lytter pågtm.js, så med TrackWP som container-loader fyrede ingen af dem — hverken Google-tagget, conversion linkeren eller tredjeparts-tags. Fejlen var usynlig i GTM Preview, fordi Tag Assistant selv indsætter en korrekt container-load - Fix: 404 på
/wp-json/trackwp/v1/c/_/service_worker/.../sw_iframe.htmli konsollen ved førsteparts-loader.first_party_collection: truefik gtag.js til at behandle proxyen som en server-side GTM-container og lede efter dens service worker, som proxyen ikke er. Flaget er fjernet — hits sendes fortsat tiltransport_url, uændret. Sidegevinst: gtag vedhæfter nu igen førsteparts Google Ads-klik-id'er (gclgs/gclst/gcllp), som en rigtig server-container ellers selv skulle have læst - Fix: GA4 og Meta udelod
valueogcurrencypå et køb til 0 kroner (100% rabatkode eller gavekort), fordi feltet kun blev sat når værdien var forskellig fra nul. Begge platforme kræver dem på Purchase - Fix:
transaction_idsættes nu uafhængigt af om varelinjerne kunne opløses. Før lå det inde i items-blokken, så en ordre uden genkendelige linjer mistede det felt GA4 deduplikerer på - Fix: Ecommerce-data valideres nu ét sted, før det når Google og Meta. Ukendte felter fjernes, varer uden
item_idelleritem_namedroppes (GA4 afviser dem alligevel), ikke-numeriske priser fjernes, et antal på nul eller derunder gemmes ikke, og der sendes højst 50 varelinjer pr. begivenhed - Fix: Google Ads-konverteringen fra browseren brugte et tilfældigt event-id som
transaction_id. Den bruger nu ordrenummeret, så klient og server peger på samme konvertering - Fix: Meta Pixel i browseren sendte hverken produktdata eller
order_id, så de to halvdele af et dedupliceret par var uenige om deres parametre.num_itemssendes kun på InitiateCheckout, som Metas dokumentation foreskriver - Ny: Leveringsloggen skriver nu én "modtaget"-række pr. indkommende begivenhed, så oversigten viser hvad der faktisk fyrede — også på sites uden platform konfigureret eller i client_only-tilstand
- Test: Pluginets phpunit-suite er udvidet med 20 nye tests af ecommerce-sanitizeren, shop-skabelonerne og WooCommerce-indstillingerne. Hele funktionaliteten er desuden verificeret mod en kørende WooCommerce-butik med moms, rabatkoder, HPOS og blok-baseret kurv og checkout, samt i en rigtig browser