{"id":245509,"date":"2025-08-16T19:14:40","date_gmt":"2025-08-16T19:14:40","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/groundworx-google-tag-manager\/"},"modified":"2026-04-01T22:00:57","modified_gmt":"2026-04-01T22:00:57","slug":"groundworx-gtm","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/groundworx-gtm\/","author":8122980,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"6.9.4","requires":"5.2","requires_php":"7.4","requires_plugins":null,"header_name":"Groundworx GTM","header_author":"Groundworx","header_description":"Adds Google Tag Manager to your site using native WordPress hooks. Lets you exclude tracking for specific user roles.","assets_banners_color":"f0f0f0","last_updated":"2026-04-01 22:00:57","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/groundworx","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/groundworx-gtm","header_author_uri":"https:\/\/groundworx.dev","rating":0,"author_block_rating":0,"active_installs":10,"downloads":329,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"Alexandrie","date":"2025-08-16 19:23:06"},"1.1.0":{"tag":"1.1.0","author":"Alexandrie","date":"2026-04-01 22:00:57"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3345689,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3345689,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3345689,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3345689,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3345689,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"Settings panel with GTM ID and role exclusions."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[232,23294,23295,550],"plugin_category":[36],"plugin_contributors":[242341],"plugin_business_model":[],"class_list":["post-245509","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-google-tag-manager","plugin_tags-gtm","plugin_tags-tracking","plugin_category-analytics","plugin_contributors-alexandrie","plugin_committers-alexandrie"],"banners":{"banner":"https:\/\/ps.w.org\/groundworx-gtm\/assets\/banner-772x250.jpg?rev=3345689","banner_2x":"https:\/\/ps.w.org\/groundworx-gtm\/assets\/banner-1544x500.jpg?rev=3345689","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/groundworx-gtm\/assets\/icon-128x128.jpg?rev=3345689","icon_2x":"https:\/\/ps.w.org\/groundworx-gtm\/assets\/icon-256x256.jpg?rev=3345689","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/groundworx-gtm\/assets\/screenshot-1.jpg?rev=3345689","caption":"Settings panel with GTM ID and role exclusions."}],"raw_content":"<!--section=description-->\n<p>Groundworx GTM is a lightweight plugin that cleanly adds Google Tag Manager (GTM) to your WordPress site.<\/p>\n\n<p>It uses core WordPress hooks like <code>wp_head<\/code> and <code>wp_body_open<\/code>, ensuring compatibility and avoiding messy theme edits.<\/p>\n\n<p>Features:\n* Injects GTM scripts in the proper locations (<code>&lt;head&gt;<\/code> and after <code>&lt;body&gt;<\/code>)\n* Option to disable tracking for logged-in users, by user role\n* No ads, no tracking \u2014 just works<\/p>\n\n<h3>License<\/h3>\n\n<p>GPLv2 or later<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via Plugins &gt; Add New.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to Settings &gt; Groundworx GTM and enter your GTM ID.<\/li>\n<li>Optionally choose user roles to exclude from GTM injection.<\/li>\n<\/ol>\n\n<h4>External services<\/h4>\n\n<p>This plugin relies on the following third-party service:<\/p>\n\n<p><strong>Google Tag Manager (GTM)<\/strong><br \/>\n\u2022 <strong>Purpose:<\/strong> Loads your GTM container so you can manage analytics\/marketing tags from GTM.<br \/>\n\u2022 <strong>When it runs:<\/strong> Only when a valid GTM Container ID (e.g., GTM-XXXXXXX) is saved in the plugin settings and output is enabled. If no ID is set or output is disabled, nothing is loaded.<br \/>\n\u2022 <strong>What is sent and where:<\/strong> The plugin outputs the standard GTM bootstrap script and a <code>&lt;noscript&gt;<\/code> iframe. The visitor\u2019s browser then requests:<br \/>\n  \u2013 <code>https:\/\/www.googletagmanager.com\/gtm.js<\/code><br \/>\n  \u2013 <code>https:\/\/www.googletagmanager.com\/ns.html<\/code><br \/>\n  These requests send standard browser metadata (IP, user agent, referrer, page URL) to Google to serve the files.<br \/>\n\u2022 <strong>Scope:<\/strong> Front-end pages only. The plugin does not transmit admin data.<br \/>\n\u2022 <strong>Policies:<\/strong><br \/>\n  \u2013 <a href=\"https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/tag-manager\/\">Google Tag Manager Terms of Service<\/a><br \/>\n  \u2013 <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><br \/>\n\u2022 <strong>Data stored by this plugin:<\/strong> None. The plugin does not log, transmit, or store visitor data in WordPress.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20track%20logged-in%20users%3F\"><h3>Will this track logged-in users?<\/h3><\/dt>\n<dd><p>No, not if you exclude their role from the settings panel.<\/p><\/dd>\n<dt id=\"where%20is%20the%20gtm%20code%20inserted%3F\"><h3>Where is the GTM code inserted?<\/h3><\/dt>\n<dd><ul>\n<li>The <code>&lt;script&gt;<\/code> is injected in the <code>&lt;head&gt;<\/code> using <code>wp_head<\/code>.<\/li>\n<li>The <code>&lt;noscript&gt;<\/code> fallback is injected after <code>&lt;body&gt;<\/code> using <code>wp_body_open<\/code>.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20if%20my%20theme%20doesn%E2%80%99t%20use%20%60wp_body_open%60%3F\"><h3>What if my theme doesn\u2019t use `wp_body_open`?<\/h3><\/dt>\n<dd><p>You'll see an admin notice prompting you to update your theme.\nIf your theme doesn\u2019t support <code>wp_body_open<\/code>, you can manually add it by inserting <code>&lt;?php wp_body_open(); ?&gt;<\/code> immediately after the opening <code>&lt;body&gt;<\/code> tag in your theme\u2019s <code>header.php<\/code> file.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20edit%20my%20theme%3F\"><h3>Do I need to edit my theme?<\/h3><\/dt>\n<dd><p>Usually no \u2014 most modern themes include <code>wp_head<\/code> and <code>wp_body_open<\/code>. But if your theme is older or custom, you might need to add <code>wp_body_open()<\/code> manually after <code>&lt;body&gt;<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Rebuilt settings page with React using WordPress components<\/li>\n<li>Moved settings under shared Groundworx admin menu<\/li>\n<li>Added REST API for settings (replaces Settings API)<\/li>\n<li>Added settings link to plugin action links<\/li>\n<li>Added keyboard shortcut (Ctrl\/Cmd+S) to save settings<\/li>\n<li>Lowered PHP requirement to 7.4<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: inject GTM via <code>wp_head<\/code> and <code>wp_body_open<\/code><\/li>\n<\/ul>","raw_excerpt":"Cleanly inject Google Tag Manager (GTM) into your site using WordPress-native hooks. No tracking for selected user roles.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/245509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=245509"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alexandrie"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=245509"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=245509"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=245509"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=245509"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=245509"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=245509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}