Releases: alphawebdk/trackwp
Release list
TrackWP 1.10.0
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
TrackWP 1.9.0
Rettelser
Begivenheder kunne ikke gemmes. Sanitizeren afslashede JSON'en en ekstra gang — WordPress havde allerede gjort det — så enhver selector med anførselstegn (fx a[href^="tel:"]) ødelagde payloaden, og hele listen blev stille nulstillet til standardbegivenhederne. Samme fejl ramte cookie-deklarationerne. Afviste begivenheder droppes ikke længere i tavshed, og en ugyldig indsendelse overskriver aldrig den gemte liste.
Dobbelttælling i GA4. Et Measurement Protocol-kald der timede ud blev sendt igen, selvom hittet var leveret — GA4 MP deduplikerer ikke på event_id som Meta CAPI gør. Der retryes nu kun på HTTP 5xx, og batches med ukendt udfald genkøes ikke.
send_to håndhæves nu også klient-side. Meta Pixel og Google Ads gtag-konverteringer fyrede for begivenheder der var routet væk fra platformen.
Dublerede begivenhedsnavne bandt to gange på frontenden og sendte to events med forskellige event_id'er. De afvises nu, og eksisterende dubletter ryddes ved opgradering.
Guard mod syntetiske klik — temaer og menu-scripts der gendispatcher element.click() udløste eventet to gange.
Banner-farverne virkede ikke på "cookiebot"- og "bottombar"-stilene: CSS'en havde hardkodet baggrunds- og tekstfarver der overskrev de valgte.
Desuden: AJAX-formularer trackes ved hver indsendelse; begivenheder udløst før samtykkevalget køes og sendes ved accept; fejl- og bekræftelsesbeskeder vises nu i admin (settings_errors() blev aldrig kaldt); endpoint-sluggen kunne skygge for pluginets egne REST-ruter; den engelske oversættelse virkede aldrig, fordi kun .po blev distribueret; PHP 8-warning i validate_event().
Nyt
Custom events med firing triggers og betingelser, bygget efter Google Tag Managers model: en begivenhed sendes når EN AF dens triggere matcher, og en trigger matcher når ALLE dens betingelser er sande. Betingelser på sidevariable (Page URL, Hostname, Path, URL Fragment, Query Parameter, Title, Referrer), klikvariable (Click ID, Classes, Text, URL, Element) og formularvariable (Form ID, Classes, Action, Element). Operatorer: equals, contains, starts/ends with, has CSS class, matches CSS selector, exists — plus negationer. Klassematching er token-baseret, og URL-triggere reevalueres ved SPA-navigation.
Leveringslog (fra som standard). Viser hvilke begivenheder der faktisk er sendt til hver platform, med graf pr. dag og advarsel ved mulig dobbelttælling. Gemmer udelukkende leveringsmetadata — hverken IP, browseroplysninger, side-URL, formularindhold, e-mail, telefon, client_id, gclid eller Facebook-cookies. Slettefrist 7 dage som standard, maks. 30, med dagligt oprydningsjob.
Cookie-deklarationer er nu med i eksport/import. LICENSE-filen (GPLv2) manglede i plugin-roden trods GPL-headeren.
Opdatering
Sites på 1.8.0 får opdateringen automatisk i wp-admin inden for ca. 12 timer, eller straks via "Check for updates" under TrackWP på Plugins-siden.
TrackWP 1.8.0
Auto-opdateringer via GitHub Releases (Plugin Update Checker v5.7) — opdateringsnotifikation og 1-klik-opdatering i wp-admin.
Indeholder også hele 1.7.2-fixsættet fra trippel-reviewet:
- GS2
_ga_*-session-cookie-parsing (GA4-format maj 2025 — session-stitching var brudt) send_tohåndhæves server-side; Google Ads CAPI kræver hovedkontakt + eksplicit event-flag- GA4 batch-cron-flush virker nu i WP-Cron; Meta CustomEvent-dedup rettet
- Consent-version håndhæves overalt;
user_dataudelades ved afvist marketing - Cookie-oprydning ved tilbagetrækning (_ga/ga*/_gcl_aw); 90-dages marketing-cookie-levetid
- Origin+rate-limit på consent-endpoints; collect-proxy relayer kun eget GA4-property
Installation på klient-sites: upload zip'en manuelt én gang — herefter kommer opdateringer automatisk i wp-admin. (Repoet er offentligt, så der kræves ingen token; TRACKWP_GITHUB_TOKEN understøttes stadig, men er unødvendig.)