Title: BrandMeetsCode DataLayer Tracker
Author: Whittfield Holmes
Published: <strong>31 de maig de 2026</strong>
Last modified: 7 de juny de 2026

---

Buscar complements

![](https://ps.w.org/brandmeetscode-datalayer-tracker/assets/banner-772x250.png?
rev=3555925)

![](https://ps.w.org/brandmeetscode-datalayer-tracker/assets/icon-256x256.png?rev
=3556893)

# BrandMeetsCode DataLayer Tracker

 Per [Whittfield Holmes](https://profiles.wordpress.org/whittfield/)

[Baixar](https://downloads.wordpress.org/plugin/brandmeetscode-datalayer-tracker.1.2.8.zip)

 * [Detalls](https://ca-valencia.wordpress.org/plugins/brandmeetscode-datalayer-tracker/#description)
 * [Ressenyes](https://ca-valencia.wordpress.org/plugins/brandmeetscode-datalayer-tracker/#reviews)
 *  [Instal·lació](https://ca-valencia.wordpress.org/plugins/brandmeetscode-datalayer-tracker/#installation)
 * [Desenvolupament](https://ca-valencia.wordpress.org/plugins/brandmeetscode-datalayer-tracker/#developers)

 [Suport](https://wordpress.org/support/plugin/brandmeetscode-datalayer-tracker/)

## Descripció

**BrandMeetsCode DataLayer Tracker** sends **structured data** to `window.dataLayer`
so Google Tag Manager or your own tags can consume consistent events and page context.

By **Whittfield Holmes** at **[Brand Meets Code](https://brandmeetscode.com/)**.
Listed on WordPress.org as **BrandMeetsCode DataLayer Tracker**; the wp-admin menu
is **DataLayer Tracker**.

This plugin is **fully functional** with **no license checks**, **no trial period**,**
no usage quotas**, and **no disabled settings** in wp-admin.

#### Included features

 * **Page & content context** — page type, IDs, title, URL, slug/path, categories/
   tags, referrer, **UTM parameters**
 * **Visitor & device hints** — resolution, timezone offset, browser language; optional
   cookie exposure rules
 * **Logged-in user context** — role-style flags and optional **hashed user id**(
   modes you configure)
 * **Engagement** — scroll depth (modes), scroll back up, focus/blur, time on page,**
   active time**, **hover intent**, **video progress**, default clicks; optional
   deeper click/field/section options where listed in Settings
 * **Forms** — `form_view`, `form_field_start`, `form_submit`, `form_error`, `form_abandon`;
   optional form-vendor shortcut mode
 * **WooCommerce (when enabled)** — browser **GA4-style ecommerce** events (view_item,
   add_to_cart, purchase, etc.) when WooCommerce is active
 * **Google Tag Manager** — optional container **snippet** output from settings (
   you configure tags inside GTM)
 * **Consent-aware loading** — delay until consent, CMP preference, TCF option, 
   fallbacks
 * **Page URL filtering** — regex exclude list
 * **Sessions** — client-side session timeout/heartbeat options
 * **Debugging** — console logging levels and admin **debug overlay** (core panels)
 * **Developer-friendly** — hooks/filters; push custom `window.dataLayer` events
   from theme or other plugins

#### Consent Management

Auto-detection and integration patterns vary by CMP; you remain responsible for 
correct legal configuration on your site.

#### Google Tag Manager

Optional **snippet** + consistent **dataLayer** pushes. Configure tags, triggers,
and variables inside GTM.

### External Services

#### Google Tag Manager (optional — only when you configure a container ID)

This plugin includes an optional feature to inject the Google Tag Manager container
snippet on your site’s front end. This feature is **disabled by default** and only
activates when you enter a GTM Container ID in the plugin settings and enable the
snippet toggle.

**What it does:** When enabled, the plugin outputs the standard GTM `<script>` and`
<noscript>` tags that load `https://www.googletagmanager.com/gtm.js`. This causes
the visitor’s browser to contact Google’s servers to load the GTM container.

**What data is sent:** When GTM loads, Google receives the visitor’s IP address,
browser, and the URL being viewed — the same data sent by any website that loads
GTM. No additional data is sent by this plugin beyond the standard GTM request. 
The plugin itself populates `window.dataLayer` in the browser; it is your GTM configuration
that determines what analytics data leaves the site.

**When it is sent:** Only on front-end page loads when the visitor’s browser downloads
the GTM script. If the consent-delay feature is enabled, the snippet is withheld
until the visitor grants consent via your CMP.

**Service provider:** Google LLC

 * **Terms of Service:** [Google Terms of Service](https://policies.google.com/terms)
 * **Privacy Policy:** [Google Privacy Policy](https://policies.google.com/privacy)
 * **GTM documentation:** [Google Tag Manager](https://marketingplatform.google.com/about/tag-manager/)

#### WordPress Admin AJAX

All plugin settings saves, the setup wizard, and admin actions use WordPress’s built-
in `admin-ajax.php` endpoint. All requests go to your own WordPress installation.
No data is sent to external servers by these requests.

**Important:** You are responsible for ensuring that any third-party analytics services(
GTM, GA4, etc.) you configure on your site comply with applicable data-protection
laws (GDPR, CCPA, etc.) and that visitors are properly informed. This plugin provides
consent-delay and CMP-detection functionality to help withhold scripts until consent
is obtained, but legal compliance remains your responsibility.

### Privacy Policy

BrandMeetsCode DataLayer Tracker may expose, depending entirely on which options
you enable:

 * Page URL, titles, and taxonomy-style context
 * Logged-in user fields you choose to surface, including optional **hashed** identifiers
 * Engagement signals (scroll depth, timing, generic form interactions)
 * WooCommerce-related item data when ecommerce tracking is enabled
 * Structured event data pushed to `window.dataLayer` for use by analytics tools
   you configure

This plugin does not send data to any external server on your behalf. You are responsible
for consent, disclosure, and lawful basis for any analytics tools you add to your
site. The plugin does not replace legal or DPO review.

Data is exposed to the browser `dataLayer`; downstream tags decide what leaves the
site.

### Support

#### Documentation

 * Full Documentation: [https://datalayer-tracker.com/knowledge-base](https://datalayer-tracker.com/knowledge-base)
 * Video Tutorials: [YouTube Channel](https://youtube.com/@whittfieldholmes)

#### Community Support

 * Support Forum: [WordPress.org](https://wordpress.org/support/plugin/brandmeetscode-datalayer-tracker)

### Developer Hooks

#### Filters (examples)

    ```
    add_filter(
        'brandatr_before_push',
        static function ( $event ) {
            $event['custom_field'] = 'value';

            return $event;
        }
    );

    add_filter(
        'brandatr_should_track_event',
        static function ( $should_track, $event_name ) {
            if ( 'unwanted_event' === $event_name ) {
                return false;
            }

            return $should_track;
        },
        10,
        2
    );
    ```

#### Actions

    ```
    // Run code after consent granted
    add_action('brandatr_consent_granted', function($consent_types) {
        // Your code here
    });

    // Run code after dataLayer push
    add_action('brandatr_after_push', function($event) {
        // Your code here
    });
    ```

#### JavaScript API

    ```
    // Push custom event
    window.dataLayer.push({
        event: 'custom_event',
        custom_param: 'value'
    });

    // Get session context
    const context = window.ADTSession?.getContext();

    // Check consent
    const hasConsent = window.hasConsent('analytics');<h3>Credits</h3>
    ```

Developed by **Whittfield Holmes** at **[Brand Meets Code](https://brandmeetscode.com/)**.

Special thanks to the WordPress community, beta testers, and all users who provide
feedback and feature requests.

## Captures

 * [[
 * **Live debug overlay (admin-only)** — Front-end overlay on your site: stream 
   events (for example `tab_visibility`, `page_exit`), pin payloads, and QA tracking
   before GTM Preview. Visible only to logged-in users at or above the role you 
   set in Settings (default: Administrator). [Try the interactive demo](https://datalayer-tracker.com/debug-overlay-demo).
 * [[
 * **Setup wizard** — Welcome step of the guided setup: walk through configuration,
   tracking, GTM, consent, and review in six steps.
 * [[
 * **Metadata tracking** — Campaign attribution via UTM capture; optionally expose
   selected cookies to the dataLayer with `cookie_list`.
 * [[
 * **Integrations** — Video progress and WooCommerce ecommerce toggles for GA4-compatible
   events (`view_item`, `add_to_cart`, `purchase`, and more) when those integrations
   are active.
 * [[
 * **Advanced options** — Session timeout and event history limits that control 
   session resets and how many events the overlay keeps for rehydration.
 * [[
 * **Debug options** — Console debug mode and log verbosity, plus overlay settings
   for front-end QA without exposing tools to visitors.

## Instal·lació

#### Automatic Installation

 1. Log into your WordPress admin dashboard
 2. Navigate to **Plugins > Add New**
 3. Search for “DataLayer Tracker”
 4. Click **Install Now** then **Activate**

#### Manual Installation

 1. Download the plugin ZIP file
 2. Navigate to **Plugins > Add New > Upload Plugin**
 3. Choose the ZIP file and click **Install Now**
 4. Click **Activate Plugin**

#### Building the free (.org) ZIP from source (maintainers)

Canonical **free** source lives in **`brandmeetscode-datalayer-tracker/`** at the
repository root. From the **repository root**, run **`./build-free-zip.sh`** to 
create **`brandmeetscode-datalayer-tracker-wporg-<version>.zip`** (same folder name
inside the ZIP). Pass a path as the first argument to set the output file; **parent
directories are created** if missing (e.g. `../dist/`). Before uploading to WordPress.
org, run **`./scripts/wporg-pre-submit-audit.sh`** to build and scan the ZIP for
common Plugin Review issues.

**WordPress.org slug reservation:** After updating code, reply to the Plugin Review
email and request slug **`brandmeetscode-datalayer-tracker`**. A temporary Text 
Domain warning until WordPress updates their side is expected.

#### Quick Setup

 1. Go to **DataLayer Tracker** in the WordPress admin menu
 2. Enable the dataLayer options you need (page context, engagement, consent, etc.)
 3. Optionally add your **Google Tag Manager** container ID and enable snippet output
 4. Use **Regex exclude** under Advanced Options if certain URLs must not emit tracking-
    related events
 5. Turn on **Debug mode** / **Debug overlay** while verifying events in the browser
    or GTM Preview
 6. Optional **Settings import/export** for backing up JSON configuration

#### Why use this plugin?

 * Sensible defaults for `dataLayer` structure on WordPress
 * Consent-aware behavior without replacing your CMP
 * Every setting in this plugin works without payment or license keys

## PMF

### Do I need Google Tag Manager?

No! While ADT integrates seamlessly with GTM, it pushes events to the dataLayer 
which can be used independently or with any analytics platform.

### Does this work with WooCommerce?

Yes, when WooCommerce is active you can enable **WooCommerce ecommerce tracking**
in Settings for GA4-style browser events (view_item, add_to_cart, purchase, and 
more).

### Will this slow down my site?

Impact depends on enabled features and theme; scripts are scoped to frontend behavior
typical of analytics tooling.

### Is this GDPR compliant?

The plugin ships consent delay and CMP-related options. Compliance depends on your
legal stance, CMP, and downstream tags—you remain responsible.

### Can I track custom events?

Yes—as with any dataLayer deployment you may `window.dataLayer.push({ ... })` from
themes or scripts.

You can also configure **stored custom events (JSON)** in Settings when that field
is present in your build.

### Does this work with page builders?

Typically yes when frontend output and script loading behave like a normal theme.

### How do I debug tracking issues?

Enable Debug Mode, use the overlay (role-gated), console logs, inspect `window.dataLayer`,
use GTM Preview when applicable.

### Does this track personal data?

Depends on enabled options (e.g. hashed user id, ecommerce). Respect consent obligations
and disclose in your privacy policy.

### Can I exclude certain pages from tracking?

Yes. Use **Regex exclude** under Advanced Options (included in `.org`).

## Ressenyes

No hi ha ressenyes per a este complement.

## Col·laboradors i desenvolupadors

«BrandMeetsCode DataLayer Tracker» és programari de codi obert. La següent gent 
ha col·laborat en este complement.

Col·laboradors

 *   [ Whittfield Holmes ](https://profiles.wordpress.org/whittfield/)

[Traduïx «BrandMeetsCode DataLayer Tracker» a la teua llengua.](https://translate.wordpress.org/projects/wp-plugins/brandmeetscode-datalayer-tracker)

### T’interessa el desenvolupament?

[Revisa el codi](https://plugins.trac.wordpress.org/browser/brandmeetscode-datalayer-tracker/),
dona una ullada al [repositori SVN](https://plugins.svn.wordpress.org/brandmeetscode-datalayer-tracker/)
o subscriu-te al [registre de desenvolupament](https://plugins.trac.wordpress.org/log/brandmeetscode-datalayer-tracker/)
per [RSS](https://plugins.trac.wordpress.org/log/brandmeetscode-datalayer-tracker/?limit=100&mode=stop_on_copy&format=rss).

## Registre de canvis

#### 1.2.8 – 2026-05-27

 * Admin: optional WordPress.org review prompt on DataLayer Tracker screens (after
   14 days, dismissible, not site-wide)

#### 1.2.7 – 2026-05-26

 * WordPress.org: updated plugin directory banner, icon, and readme screenshots
 * Prefix: rename all plugin symbols from `adt_`/`ADT_` to `brandatr_`/`BRANDATR_`(
   4+ character prefix per WordPress.org guidelines)
 * Security: localize admin-ajax URL via `admin_url()` — remove hardcoded `/wp-admin/
   admin-ajax.php` fallbacks in JS
 * Security: escape JSON-LD inline script with default `wp_json_encode()` flags (
   no JSON_UNESCAPED_SLASHES)
 * Security: move CMP status panel to enqueued JS with safe DOM APIs (`textContent`/`
   createElement`) instead of `innerHTML` with runtime strings
 * Migration: copy legacy `adt_*` options, transients, and user meta to `brandatr_*`
   on upgrade

#### 1.2.6 – 2026-05-26

 * Security: session IDs use `random_bytes()` only — no WordPress auth salt material
 * Privacy: remove GA4 Measurement Protocol refund calls from wp-admin (no third-
   party tracking from admin)
 * Plugin Check: pair inline script output buffers via `brandatr_capture_inline_script()`;
   remove stray global `ob_start()`
 * Security: sanitize AJAX nonces with `sanitize_text_field()` before verification;
   sanitize array setting values on save; remove `nonce_hint` from error responses
 * Naming: remove deprecated unprefixed PHP wrappers (`user_is_premium`, `has_consent`,`
   enqueue_brandatr_assets`, `render_brandatr_*`)
 * Cleanup: remove dead setup-wizard GA4/Meta connection-test JavaScript (handlers
   were not shipped in this build)

#### 1.2.5 – 2026-05-18

 * WordPress.org naming: distinctive listing **BrandMeetsCode DataLayer Tracker**;
   slug and text domain **brandmeetscode-datalayer-tracker**; wp-admin UI remains**
   DataLayer Tracker**
 * WordPress.org compliance: remove server-side connection-test AJAX handlers (GA4
   MP, Meta CAPI) from setup wizard — these features are not included in this build
 * Update External Services documentation to accurately reflect only services this
   build actually contacts
 * Remove all remaining inline `<script>`/`<style>` tags; all JS/CSS now enqueued
   via wp_enqueue/wp_add_inline_script
 * Fix: session_start() restricted to WooCommerce order-received pages only (not
   all pages)
 * Clean up wizard settings field map to remove fields for removed features
 * Docs: WooCommerce browser events, field-level form tracking, and form-vendor 
   shortcuts are included in the free build (enable in Settings); Pro listing corrected
   on welcome and pricing pages
 * Plugin Check: escape tab SVG output with `wp_kses()`; **Tested up to** 7.0
 * Security: nonce + `manage_options` on all privileged admin/AJAX mutations; removed
   unauthenticated welcome dismiss GET shortcut
 * Plugin Check: centralize admin GET action nonce checks in `brandatr_verify_admin_get_action()`
 * Naming: prefix public PHP helpers (`brandatr_has_consent`, `brandatr_user_is_premium`,`
   brandatr_enqueue_assets`, `brandatr_render_field_callback`); deprecated aliases
   retained

#### 1.2.4 – 2026-05-18

 * Fix consent blocking: cast consent-related settings to strings to match JS strict
   comparisons
 * Fix: replace broken adt-ip-exclusion-check.js enqueue with inline script injection
 * Remove broken external logo from debug overlay; overlay title uses DataLayer 
   Tracker
 * Fix SyntaxError in adt-consent-universal.js and adt-cmp-debug.js (stray tags)
 * Fix 502 Bad Gateway: guard brandatr_register_settings() from running on AJAX 
   requests

#### 1.2.3 – 2026-05-18

 * WordPress.org compliance: remove Pixels, Server-Side Tracking, GTM Exporter, 
   and Content Intelligence modules
 * Fix fatal error: add missing `brandatr_detect_cmp_server_side()` function used
   by consent status panel
 * Rename plugin to BrandMeetsCode DataLayer Tracker; update contributors list and
   support links

#### 1.2.2 – 2026-05-15

 * Remove Freemius trial/checkout from `.org`-bound **core** build; paid checkout
   + licensing live in the optional **DataLayer Tracker Pro** companion (Freemius
   SDK + `brandatr_user_is_premium`); **`DATALAYER_TRACKER_PRO_ACTIVE`** only marks
   the companion as loaded
 * Add **Customer area** wp-admin screen (`brandatr-settings-account`) linking **
   datalayer-tracker.com** pricing, **customer portal** (`/account`  Freemius), 
   downloads, docs
 * Add `brandatr_get_pro_sales_url()`, `brandatr_get_pro_customer_download_url()`,**`
   brandatr_get_pro_customer_account_url()`** with **`BRANDATR_PRO_SALES_URL`**,**`
   BRANDATR_PRO_CUSTOMER_DOWNLOAD_URL`**, **`BRANDATR_PRO_CUSTOMER_ACCOUNT_URL`**,
   filters `brandatr_pro_sales_url`, `brandatr_pro_customer_download_url`, **`brandatr_pro_customer_account_url`**
 * Let free installs open all ADT wp-admin tabs (welcome wall removed)
 * Refresh **readme** so WordPress.org **Description/FAI** reflects free vs **Pro**

#### 1.2.1 – 2025-01-15

**New Features:**
 * Multi-pixel tracking with 6 platform support (Premium) * Dual
pixel mode – GTM + Direct SDK (Premium) * Cart abandonment tracking with 3 detection
methods * Session-aware ecommerce tracking * Form vendor auto-detection for 20+ 
platforms * Field-level form tracking (Premium) * Video progress tracking (YouTube/
Vimeo) * Event simulator in debug overlay * SDK status monitoring * Export history
tracking

**Improvements:**
 * Performance: 40% faster event processing * Consent: Better 
CMP detection with 5-second timeout * GTM Export: Category-grouped containers * 
Debug Overlay: Event filtering and search * Settings: Import/Export configuration
as JSON

**Bug Fixes:**
 * Fixed checkbox save issue in settings * Fixed AJAX cart tracking
timing * Fixed consent queue not flushing properly * Fixed duplicate scroll events*
Fixed builder iframe detection

#### 1.1.0 – 2024-12-01

 * Initial public release
 * Core engagement tracking
 * Basic ecommerce support
 * Form tracking
 * GTM export functionality
 * Debug overlay
 * Consent management

## Meta

 *  Versió **1.2.8**
 *  Última actualització **fa 4 hores**
 *  Instal·lacions actives: **Menys de 10**
 *  Versió de WordPress: ** 5.8 o posterior **
 *  Provat fins a **7.0**
 *  Versió de PHP: ** 7.4 o posterior **
 *  Idioma
 * [English (US)](https://wordpress.org/plugins/brandmeetscode-datalayer-tracker/)
 * Etiquetes
 * [analytics](https://ca-valencia.wordpress.org/plugins/tags/analytics/)[consent](https://ca-valencia.wordpress.org/plugins/tags/consent/)
   [google tag manager](https://ca-valencia.wordpress.org/plugins/tags/google-tag-manager/)
   [tracking](https://ca-valencia.wordpress.org/plugins/tags/tracking/)[woocommerce](https://ca-valencia.wordpress.org/plugins/tags/woocommerce/)
 *  [Vista avançada](https://ca-valencia.wordpress.org/plugins/brandmeetscode-datalayer-tracker/advanced/)

## Valoracions

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/brandmeetscode-datalayer-tracker/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/brandmeetscode-datalayer-tracker/reviews/)

## Col·laboradors

 *   [ Whittfield Holmes ](https://profiles.wordpress.org/whittfield/)

## Suport

Tens alguna cosa a dir? Necessites ajuda?

 [Vore els fòrums de suport](https://wordpress.org/support/plugin/brandmeetscode-datalayer-tracker/)