| 开发者 | trackity |
|---|---|
| 更新时间 | 2026年7月18日 13:09 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/wp-content/plugins/.No. Tracking starts after a store administrator connects the plugin with a Trackity API key.
Yes. Use the Disconnect button on the Trackity admin page.
eventId sent by the browser pixel now uses the fully-scoped woocommerce_order.created_<host>_<orderId> format, matching the server CAPI path — enables platform-level purchase deduplication on Meta, TikTok, Pinterest, Snapchat, and Reddit.begin_checkout, checkout_contact_info_submitted, payment_info_submitted) now use a sessionStorage-scoped ID instead of the raw WooCommerce cart token. The session ID is cleared after purchase so subsequent checkouts in the same browser session generate a fresh ID and are no longer silently dropped by the DB unique constraint.begin_checkout, checkout_contact_info_submitted, and payment_info_submitted now use the cart token as a stable anchor (<cart_token>, <cart_token>_contact, <cart_token>_payment) on both PHP and JavaScript sides — previously PHP generated a random ID on every call, causing duplicate CAPI conversions when both paths fired.eventID sent by the browser pixel is now the WooCommerce order ID, matching the server CAPI path — enables platform-level deduplication on Meta, TikTok, Pinterest, Reddit, and Snapchat.handle_add_to_cart no longer sends a redundant server-side pixel event. The browser JS covers this reliably; PHP had no stable shared ID, which caused double-counting on every add-to-cart.build_common_payload now unsets eventId and transactionId from $extra before the generic merge loop, preventing sanitized values from being silently overwritten by unsanitized originals.value|timestamp format). The server transformer reads this timestamp so time-decay attribution uses the actual click time instead of the synthetic "order creation − 1 hour" fallback. Older plugin versions without the timestamp continue to work unchanged via the fallback.fp_ prefix strip and short hashes from pre-padStart versions — old values trigger a fresh 8-character base-36 regeneration rather than carrying forward a length-mismatched hash.conversionValidation.botInfo is now an object { isBot, signals, confidence } matching the Shopify pixel shape, instead of a raw signals array.begin_checkout from hanging if the Store API is slow or unavailable._gcl_gb cookie now correctly assigned to wbraid when the value starts with WB, and gbraid otherwise — prevents mis-attribution of web-to-app Google campaigns._fbp/_fbc cookies now stored in the v2 nested blob with a 90-day expiry when real click evidence exists, so returning Meta visitors retain full attribution context across sessions._fbp/_fbc now also included for returning visitors who originally clicked a Meta ad in a prior session — stored v2 blob's fbclid entry used as cross-session click evidence.scid alias; Taboola extended with tabclid; Snapchat _scid and TikTok _ttp cookies now captured into the v2 nested blob.productCollections in product_viewed now sends a flat string array (e.g. ["Shoes", "Sale"]) matching the Shopify pixel shape.
attributionData field now included in all event payloads — active-window-filtered view of the v2 blob with daysRemaining/hoursRemaining per entry.productViewTiming in add_to_cart now sends the full object shape ({ productId, viewTimestamp, addToCartTimestamp, millisecondsBetween }).funnelTiming in begin_checkout now includes millisecondsBetween alias.trackityClientId field added to common event payload alongside clientId.product_viewed now strips query parameters.lidc added to LinkedIn URL click params.
Checkout & purchase
payment_info_submitted now re-fires at order submit with the final payment method when the customer changed it after the initial event.
checkout_contact_info_submitted now fires on WooCommerce block checkout themes — email field selector extended to check #email, .wc-block-components-text-input input[type="email"], and input[name="email"].emitPurchase now writes a permanent per-order dedup key (_trackity_purchase_<orderId>) to localStorage before firing, preventing re-fire if the order-received page is revisited after the 24-hour TTL expires.begin_checkout cart context now refreshed from the live WC Store API (/wp-json/wc/store/v1/cart) after coupon application, capturing server-side discount and shipping changes DOM scraping misses. Falls back to DOM parsing when unavailable.
Storage & deduplication
_trackity_tracking_params (Shopify-compatible key) in addition to trackity_wc_tracking_data.
_utm, _traffic, and _device localStorage sub-keys now written alongside each captured click ID (e.g. _trackity_gclid_utm), matching Shopify pixel._trackity_attribution legacy flat blob now written to localStorage on every page load for server-side fallback readers._trackity_* localStorage keys cleaned up when their parent v2 entry expires._trackity_device_fingerprint, _trackity_sent_events.trackingDedupeCache.
Device fingerprint
fp_ — bare hash matches Shopify pixel format, enabling cross-platform device matching. Existing fp_* values migrated automatically.
padStart(8, '0') producing a consistent 8-character base-36 string identical to Shopify pixel output.
Bot detection & conversion validation
headless_ua → headless, empty_languages → no_languages.
conversionValidation shape now matches Shopify: { hasValidValue, hasRealisticTiming, hasSuspiciousBehavior, isLikelyValid, botInfo }.
Observability
pixelLog() — sends errors, purchase confirmations, and API failures to /pixel-events/logs, matching Shopify pixel's log-to-server behaviour.
_fbp/_fbc cookies now included for returning visitors who originally clicked a Meta ad in a prior session — the stored v2 blob's fbclid entry is checked as cross-session click evidence, covering ITP-cleared cookie scenarios._scid browser-identity cookie now captured into the v2 nested blob on pages without a URL ScCid param, so the server's attribution extractor finds Snapchat context for returning visitors._ttp pixel token now captured into the v2 nested blob alongside ttclid, matching Meta's _fbp handling for browser identity.checkout_contact_info_submitted now fires correctly on WooCommerce block checkout themes — email field selector extended to also check #email, .wc-block-components-text-input input[type="email"], and input[name="email"] in addition to #billing_email.payment_info_submitted now re-fires at order submit with the final selected payment method when the customer changed their method after the initial event, preventing the server from recording a stale payment method.productViewTiming in add_to_cart now sends the full object shape ({ productId, viewTimestamp, addToCartTimestamp, millisecondsBetween }) matching the Shopify pixel, so server-side funnel analysis reads the same field names from both platforms.funnelTiming in begin_checkout now includes millisecondsBetween alias alongside millisecondsFromAddToCart for server parity._trackity_tracking_params key (Shopify-compatible) in addition to the existing trackity_wc_tracking_data key.product_viewed now strips query parameters, matching Shopify pixel behaviour.trackityClientId field added to common event payload alongside clientId to disambiguate Trackity visitor ID from any Shopify browser client ID.lidc added to LinkedIn URL click params._trackity_* localStorage keys now cleaned up when their parent v2 entry expires.add_to_cart payload (title, price, SKU, type, image). PHP builds a productCache map of all visible products on archive pages; JS initializes window.trackityWooProductCache from it so the added_to_cart handler can enrich events without a prior product-page visit.begin_checkout checkout payload now built via shopifyCheckoutFromCart() instead of an inline object, giving lineItems the correct Shopify variant shape (variant.price.amount, finalLinePrice) consistent with the purchase event and including discountApplications and giftCards automatically.begin_checkout now reflect post-AJAX state — wireCartContextRefresh hooks into WooCommerce's updated_cart_totals event to refresh CONFIG.pageContext.cart from the live DOM after coupon application without a page reload.discountApplications, giftCards, and customer.acceptsMarketing fields now included in purchase event checkout payload (emitPurchase was building its own inline checkout object that was missing these fields added to buildCheckoutFromOrder in earlier versions).giftCards field added to all three checkout builders (buildCheckoutFromCart, buildCheckoutFromOrder, mergeCheckout) to ensure consistent payload shape across begin_checkout and purchase paths.cartId and lineItemCount now included in add_to_cart event; falls back to collectTrackingData().cart_token when pageContext.cart is null (product pages), so the cart token is captured even when the full cart context is unavailable.trk_<random> which is incompatible with Shopify pixel UUID format)._fallback_<timestamp> when fewer than 3 browser signals are available, matching Shopify pixel behaviour._trackity_{param}, _trackity_{param}_expiry, _trackity_{param}_creation) now written alongside the v2 blob so server-side code reading individual keys finds them.cartId and lineItemCount now included in add_to_cart payloads, matching Shopify pixel behaviour.giftCards field added to checkout and purchase payloads (always empty array — WooCommerce has no native gift card mechanism).kx_email, _kx) are now captured and stored in the tracking blob.