Tracks attribution data from submitted fields, cookie snapshots, first-click cookies, server-side fallback, and WooCommerce attribution in a defined source-of-truth hierarchy.
Features:
- Elementor lead capture with attribution snapshot
- WooCommerce order attribution support
- First-touch and last-touch source tracking
- Leads dashboard with filters and CSV export
- Stores WooCommerce customer phone numbers alongside attribution data
- Backward compatibility for legacy cookies, options, and meta keys
1.10.12
- Fix: prevent stale "untracked" Elementor hidden-field values from conflicting with the final server-side attribution snapshot.
- Fix: ensure webhook / CRM / Google Sheets attribution data stays consistent with the Leads Dashboard resolver output.
- Improvement: hidden attribution fields may now replace weaker "untracked" values with resolved attribution data such as direct, google, facebook, whatsapp, etc.
- Improvement: "untracked" is now preserved only for real tracking failures or fully missing attribution signals.
- Added: should_overwrite_hidden_attribution_field() helper — centralises the overwrite decision for attribution field enrichment.
1.10.11
- Feature: automatic best-effort enrichment of Elementor hidden attribution fields
before all form actions run (Webhook, Email, CRM, Elementor Submissions, etc.).
- Enrichment is strictly limited to fields whose Elementor type is "hidden".
Visible form fields are never touched under any condition.
- Two enrichment paths:
- Known attribution field IDs (utm_source, utm_medium, utm_campaign, utm_content,
utm_term, gclid, fbclid, referrer, landing_page, conversion_page,
first_touch_source, last_touch_source, confidence, lc_source, lc_medium,
lc_campaign, fc_source, attribution_source, attribution_medium) are filled
from the central resolver (UTM → Click ID → Referrer → UA → First Touch →
Direct → Untracked).
- Custom hidden fields whose ID exactly matches a URL query parameter
(e.g. utm_platform, camp_name, ad_id, adset_name) are filled from that
parameter's raw value. No inference or mapping is applied to custom fields.
- Generic aliases (source, medium, campaign) removed from resolver-based enrichment
to prevent conflicts with unrelated form fields.
- Existing field values are never overwritten — only empty recognised fields are enriched.
- Strictly non-blocking and fail-safe: if enrichment fails for any reason, form
submission continues normally. No fatal errors, no stopped submissions, no changes
to required field validation or user-facing fields.
- WP_DEBUG mode: logs a short, data-free diagnostic message if enrichment throws.
1.10.10
- Fix: prevent direct traffic from being incorrectly classified as untracked.
- Fix: ensure last_touch_source stays consistent with resolved utm_source.
Previously, when utm_source resolved to "direct", last_touch_source was incorrectly
set to "untracked" because is_meaningful_attribution_source() excludes "direct".
last_touch_source now correctly mirrors "direct" when that is the resolved state.
- Fix: improve webhook / Elementor hidden-field data consistency for unattributed traffic.
- Improvement: clearer separation between direct and untracked states across resolver,
lead snapshot, and WooCommerce order meta.
1.10.9
- Fixed: confidence is now explicit when both utm_source AND utm_medium are present in the URL,
even when fbclid is also present. fbclid no longer downgrades confidence from explicit to inferred
when full explicit UTM exists. Partial UTM + fbclid correctly stays inferred.
- Added: com.google.android.googlequicksearchbox referrer is now classified as google / organic.
This covers traffic from Android Google app surfaces (Google Discover, Search widget, Lens, Google app).
Previously this could fall through to an untracked or referral classification.
1.10.8
Explicit UTM → Click IDs → Referrer → User-Agent → First Touch → Direct → Untracked.
- Improved: fbclid split logic — fbclid alone now resolves to facebook/social (organic intent).
Only upgrades to facebook/paid when utm_campaign, utm_content, utm_term, or dynamic ad variables are present.
- Fixed: utm_medium=social (and any explicit utm_medium) is never overwritten by click ID inference.
- Improved: direct vs untracked are now clearly separated. "direct" means tracking is functioning
but no attributable source was found. "untracked" is reserved for complete tracking failure
(all signals absent: no UTM, no click ID, no referrer, no UA match, no cookie, no first-touch).
- Added: attribution confidence field (explicit / inferred / fallback / untracked) stored
in DB and order meta.
- Fixed: server_side_fallback no longer returns "untracked" for missing/internal referrers;
the caller now decides direct vs untracked based on full signal inventory.
- Improved: WooCommerce orders column and meta box now distinguish direct vs untracked visually.
- Improved: Dashboard UTM source filter now lists direct and untracked as separate options.
- Updated: DB schema version 1.4.0 — adds confidence column to wp_ute_leads table.
- Updated: utm-tracker.js — fbclid click ID split logic, confidence field in cookie snapshot,
internal navigation returns "direct" not "untracked".
1.10.7
- Fixed: fbclid normalization no longer overrides an explicitly set utm_medium=social.
Previously, any visit with fbclid and utm_medium=social (e.g. an organic Facebook post
tagged manually) would have its medium silently replaced with paid_social.
Now only empty or "none" medium values are inferred as paid_social from fbclid presence.
1.10.6
- Fixed remaining Plugin Check SQL issues (prepared statements compliance)
- Improved security of database queries.
- Cleaned uninstall logic for safer execution.
1.10.5
- Removed remaining prebuilt SQL variables and inlined prepare() calls.
- Reworked admin queries to avoid interpolated SQL variable patterns flagged by review.
- Kept phone capture, dashboard display, and CSV export support intact.
1.10.4
- Fixed admin SQL queries to use prepared statements consistently.
- Escaped interpolated table names in dashboard queries.
- Added missing translators comments and refreshed readme metadata.
1.10.3
- Added plugin readme file for compliance.
- Improved static analysis compatibility for admin SQL and translations.
- Kept lead phone field support in DB, admin table, and CSV export.
1.10.2
- Added lead phone field support.
- Added phone column to leads screen and CSV export.