This plugin helps you send structured data to window.dataLayer so Google Tag Manager or your own tags can consume consistent events and page context.
Listed as BrandMeetsCode DataLayer Tracker; commonly referred to as DataLayer Tracker.
WordPress.org compliance: This repository build is fully functional with no license checks, no trial period, no usage quotas, and no disabled settings in wp-admin. Every option in Settings works without payment. Marketing screens may link to an optional DataLayer Tracker Pro add-on (a separate plugin sold and hosted outside WordPress.org); that is not trialware.
form_view, form_field_start, form_submit, form_error, form_abandon; optional form-vendor shortcut modewindow.dataLayer events from theme or other pluginsAdvertising pixels (Meta, TikTok, Google Ads, etc.), Meta Conversions API, GA4 Measurement Protocol, GTM container JSON export, content-intelligence module, preset library admin, and related server-side code are not shipped in this zip. The Pro add-on is a separate companion plugin — purchase and download it from datalayer-tracker.com and install it alongside this free plugin when you need pixels, server-side tracking, or GTM container export. No features in this free build are locked, hidden, or time-limited.
Auto-detection and integration patterns vary by CMP; you remain responsible for correct legal configuration on your site.
Optional snippet + consistent dataLayer pushes. Full container JSON export is part of the separate Pro add-on only.
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
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.
BrandMeetsCode DataLayer Tracker may expose, depending entirely on which options you enable:
window.dataLayer for use by analytics tools you configureThis 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.
URLs for View plans, Customer downloads, and outbound marketing can be centralized—no need to fork PHP for a domain change:
Constants (define early in wp-config.php):
define( ‘BRANDATR_PRO_SALES_URL’, ‘https://yoursite.com/pricing’ );
define( ‘BRANDATR_PRO_CUSTOMER_ACCOUNT_URL’, ‘https://yoursite.com/freemius-portal/’ );
define( ‘BRANDATR_PRO_CUSTOMER_DOWNLOAD_URL’, ‘https://yoursite.com/freemius-portal/’ );
Helpers: brandatr_get_pro_sales_url(), brandatr_get_pro_customer_account_url(), brandatr_get_pro_customer_download_url()
Filters brandatr_pro_sales_url, brandatr_pro_customer_account_url, brandatr_pro_customer_download_url — final mutators WordPress-aware code calls.
In the WordPress.org build, brandatr_all_features_enabled() always returns true (no license gate). The separate Pro add-on (not hosted on WordPress.org) uses its own Freemius licensing.
add_filter(
'brandatr_pro_sales_url',
static fn () => 'https://example.com/buy/'
);
add_filter(
'brandatr_pro_customer_download_url',
static fn () => 'https://example.com/dl/'
);
add_filter(
'brandatr_pro_customer_account_url',
static fn () => 'https://example.com/account/'
);
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
);
// 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
});
// 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 Brand Meets Code
Special thanks to the WordPress community, beta testers, and all users who provide feedback and feature requests.