Opis
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
Instalacja
- Upload the plugin ZIP in WordPress admin or copy the plugin folder to /wp-content/plugins/.
- Activate the plugin.
- Configure settings from the plugin admin screen.
Kontrybutorzy i deweloperzy
„Shulman UTM Attribution for Elementor” jest oprogramowaniem open source. Poniższe osoby miały wkład w rozwój wtyczki.
ZaangażowaniPrzetłumacz wtyczkę “Shulman UTM Attribution for Elementor” na swój język.
Interesuje cię rozwój wtyczki?
Przeglądaj kod, sprawdź repozytorium SVN lub czytaj dziennik rozwoju przez RSS.
Rejestr zmian
1.10.14
- Fix: corrected inline PHPCS suppression placement for WordPress.Security.NonceVerification.Recommended warnings.
- Improvement: moved
phpcs:ignorecomments directly to the relevant$_GETaccess lines so static analysis correctly recognises the intentional nonce verification flow. - No functional plugin behavior changes.
1.10.13
- Fix: CSV export now correctly sends a downloadable file instead of printing raw CSV text into the admin page.
- Fix: Export logic moved from the admin page callback (leads-page.php) to an
admin_inithook in the main plugin class. This ensures HTTP response headers are set before WordPress outputs any HTML, which is the only reliable way to trigger a file download in the WordPress admin. - Fix: Added
ob_end_clean()loop before sending CSV headers to flush any output already buffered by WordPress or other plugins. - Fix: UTF-8 BOM is now written via
fprintf()instead ofecho, avoiding encoding issues. - Fix:
echo ""(a double-encoded BOM) replaced with the correct"\xEF\xBB\xBF"BOM byte sequence. - Improvement: leads-page.php now contains an early-return guard for export requests, preventing any HTML from leaking into the response if the admin_init handler is somehow bypassed.
- Fix: admin-export-orders.js was an empty IIFE stub — the WooCommerce orders Export CSV button was unresponsive on click. Added a delegated click handler that builds and submits a POST form to admin-post.php with the correct action and nonce values.
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.
- Known attribution field IDs (utm_source, utm_medium, utm_campaign, utm_content,
- 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.