<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.growth.agency/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aaron.trevellick</id>
	<title>Growth Agency Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.growth.agency/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aaron.trevellick"/>
	<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Special:Contributions/Aaron.trevellick"/>
	<updated>2026-04-14T04:28:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=434</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=434"/>
		<updated>2025-12-03T12:15:00Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Forminator ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(&#039;body&#039;).on(&#039;forminator:form:submit:success&#039;, &#039;.forminator-custom-form&#039;, function(e, data) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;forminator-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other JS triggers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
forminator:form:added&lt;br /&gt;
before:forminator:form:submit&lt;br /&gt;
after:forminator:form:submit&lt;br /&gt;
forminator:form:submit:success&lt;br /&gt;
forminator:form:submit:failed&lt;br /&gt;
forminator:form:submit:complete&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also change the triggers above from form to either poll and quiz &lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QuForm ==&lt;br /&gt;
&lt;br /&gt;
=== 1.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress/guides/basic/adding-custom-javascript/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if( typeof jQuery != &#039;undefined&#039; ) {&lt;br /&gt;
 &lt;br /&gt;
    jQuery(document).ready(function() {&lt;br /&gt;
      jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
        if(&lt;br /&gt;
          ~settings.data.indexOf(&#039;iphorm_id=&#039;) &amp;amp;&amp;amp;&lt;br /&gt;
          ~settings.data.indexOf(&#039;post_id=&#039;)&lt;br /&gt;
        ) {&lt;br /&gt;
          	var idRegex = settings.data.match(/iphorm_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( idRegex &amp;amp;&amp;amp; idRegex[1] ) {&lt;br /&gt;
				form_id = idRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
          	var pidRegex = settings.data.match(/post_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( pidRegex &amp;amp;&amp;amp; pidRegex[1] ) {&lt;br /&gt;
				post_id = pidRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
              &#039;form_id&#039;: form_id,&lt;br /&gt;
              &#039;post_id&#039;: post_id,&lt;br /&gt;
              &#039;domain&#039;: window.location.hostname,&lt;br /&gt;
              &#039;event&#039; : &#039;qf-form-submitted&#039;&lt;br /&gt;
            });&lt;br /&gt;
		  }&lt;br /&gt;
	  });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress-v2/guides/integration/google-analytics/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(function ($) {&lt;br /&gt;
    $(&#039;.quform-form-1&#039;).on(&#039;quform:successStart&#039;, function () {&lt;br /&gt;
        dataLayer.push({&#039;event&#039;: &#039;Contact Form&#039;});&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsystic Popup ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=subscribe&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;pl=pps&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;popup-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=433</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=433"/>
		<updated>2025-07-29T09:09:38Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Login to make changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Login to make changes ==&lt;br /&gt;
You can login using the same username and password as the tools login.&lt;br /&gt;
&lt;br /&gt;
== Main Subjects ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager Installation: [[Google Tag Manager]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Google Call Tracking: [[Google Call Tracking]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Getting Feeds: [[Feeds]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s Encrypt: [[LetsEncrypt]]&lt;br /&gt;
&lt;br /&gt;
SuiteCRM 8.x: [[SuiteCRM_8.x]]&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=430</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=430"/>
		<updated>2025-07-09T16:05:08Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* 1.x */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QuForm ==&lt;br /&gt;
&lt;br /&gt;
=== 1.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress/guides/basic/adding-custom-javascript/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if( typeof jQuery != &#039;undefined&#039; ) {&lt;br /&gt;
 &lt;br /&gt;
    jQuery(document).ready(function() {&lt;br /&gt;
      jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
        if(&lt;br /&gt;
          ~settings.data.indexOf(&#039;iphorm_id=&#039;) &amp;amp;&amp;amp;&lt;br /&gt;
          ~settings.data.indexOf(&#039;post_id=&#039;)&lt;br /&gt;
        ) {&lt;br /&gt;
          	var idRegex = settings.data.match(/iphorm_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( idRegex &amp;amp;&amp;amp; idRegex[1] ) {&lt;br /&gt;
				form_id = idRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
          	var pidRegex = settings.data.match(/post_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( pidRegex &amp;amp;&amp;amp; pidRegex[1] ) {&lt;br /&gt;
				post_id = pidRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
              &#039;form_id&#039;: form_id,&lt;br /&gt;
              &#039;post_id&#039;: post_id,&lt;br /&gt;
              &#039;domain&#039;: window.location.hostname,&lt;br /&gt;
              &#039;event&#039; : &#039;qf-form-submitted&#039;&lt;br /&gt;
            });&lt;br /&gt;
		  }&lt;br /&gt;
	  });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress-v2/guides/integration/google-analytics/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(function ($) {&lt;br /&gt;
    $(&#039;.quform-form-1&#039;).on(&#039;quform:successStart&#039;, function () {&lt;br /&gt;
        dataLayer.push({&#039;event&#039;: &#039;Contact Form&#039;});&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsystic Popup ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=subscribe&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;pl=pps&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;popup-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=429</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=429"/>
		<updated>2025-07-09T16:03:49Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking Other Wordpress Contact Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QuForm ==&lt;br /&gt;
&lt;br /&gt;
=== 1.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress/guides/basic/adding-custom-javascript/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if( typeof jQuery != &#039;undefined&#039; ) {&lt;br /&gt;
 &lt;br /&gt;
    jQuery(document).ready(function() {&lt;br /&gt;
      jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
        console.log( settings );&lt;br /&gt;
        if(&lt;br /&gt;
          ~settings.data.indexOf(&#039;iphorm_id=&#039;) &amp;amp;&amp;amp;&lt;br /&gt;
          ~settings.data.indexOf(&#039;post_id=&#039;)&lt;br /&gt;
        ) {&lt;br /&gt;
          	var idRegex = settings.data.match(/iphorm_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( idRegex &amp;amp;&amp;amp; idRegex[1] ) {&lt;br /&gt;
				form_id = idRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
          	var pidRegex = settings.data.match(/post_id=([0-9]+)/) || [&#039;&#039;];&lt;br /&gt;
			if( pidRegex &amp;amp;&amp;amp; pidRegex[1] ) {&lt;br /&gt;
				post_id = pidRegex[1];&lt;br /&gt;
			}&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
              &#039;form_id&#039;: form_id,&lt;br /&gt;
              &#039;post_id&#039;: post_id,&lt;br /&gt;
              &#039;domain&#039;: window.location.hostname,&lt;br /&gt;
              &#039;event&#039; : &#039;qf-form-submitted&#039;&lt;br /&gt;
            });&lt;br /&gt;
		  }&lt;br /&gt;
	  });&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.x ===&lt;br /&gt;
&lt;br /&gt;
https://support.themecatcher.net/quform-wordpress-v2/guides/integration/google-analytics/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(function ($) {&lt;br /&gt;
    $(&#039;.quform-form-1&#039;).on(&#039;quform:successStart&#039;, function () {&lt;br /&gt;
        dataLayer.push({&#039;event&#039;: &#039;Contact Form&#039;});&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsystic Popup ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=subscribe&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;pl=pps&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;popup-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=428</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=428"/>
		<updated>2025-06-30T11:15:42Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking Other Wordpress Contact Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsystic Popup ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=subscribe&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;pl=pps&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;popup-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=427</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=427"/>
		<updated>2025-06-30T11:14:25Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Conversion Plus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the popup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=426</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=426"/>
		<updated>2025-06-30T10:23:37Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Formidable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
Edit form -&amp;gt; Actions &amp;amp; Notifications -&amp;gt; Confirmation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;var dataLayer = window.dataLayer || []; dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager_for_WordPress_(Plugin)&amp;diff=425</id>
		<title>Google Tag Manager for WordPress (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager_for_WordPress_(Plugin)&amp;diff=425"/>
		<updated>2025-06-30T10:13:40Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* New Tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Tag Manager for WordPress is a plugin that allows easy installation and tracking for the GTM.&lt;br /&gt;
&lt;br /&gt;
https://wordpress.org/plugins/duracelltomi-google-tag-manager/&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
=== New Tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;purchase&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;ecommerce.value&lt;br /&gt;
ecommerce.transaction_id&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to the event being very generic, it is advised to put a trigger rule for ecommerce.transaction_id &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
=== Classic tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
gtm4wp.orderCompleted&lt;br /&gt;
&lt;br /&gt;
transactionProducts.sku&lt;br /&gt;
&lt;br /&gt;
Example Data From GTM4WP Plugin:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dataLayer = [{&lt;br /&gt;
&amp;quot;event&amp;quot;:&amp;quot;transaction&amp;quot;,&lt;br /&gt;
&amp;quot;transactionId&amp;quot;:&amp;quot;100002486&amp;quot;,&lt;br /&gt;
&amp;quot;transactionDate&amp;quot;:&amp;quot;2015-09-03&amp;quot;,&lt;br /&gt;
&amp;quot;transactionTotal&amp;quot;:295,&lt;br /&gt;
&amp;quot;transactionShipping&amp;quot;:0,&lt;br /&gt;
&amp;quot;transactionTax&amp;quot;:26.82,&lt;br /&gt;
&amp;quot;transactionPaymentType&amp;quot;:&amp;quot;Rechnung&amp;quot;,&lt;br /&gt;
&amp;quot;transactionCurrency&amp;quot;:&amp;quot;EUR&amp;quot;,&lt;br /&gt;
&amp;quot;transactionShippingMethod&amp;quot;:&amp;quot;tablerate&amp;quot;,&lt;br /&gt;
&amp;quot;transactionProducts&amp;quot;:[&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;:&amp;quot;Handelsvertretergesetz&amp;quot;,&lt;br /&gt;
&amp;quot;sku&amp;quot;:&amp;quot;9783700760344&amp;quot;,&lt;br /&gt;
&amp;quot;category&amp;quot;:&amp;quot;Buch&amp;quot;,&lt;br /&gt;
&amp;quot;price&amp;quot;:113.64,&lt;br /&gt;
&amp;quot;quantity&amp;quot;:1&lt;br /&gt;
},&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;:&amp;quot;Steuerrecht&amp;quot;,&lt;br /&gt;
&amp;quot;sku&amp;quot;:&amp;quot;9783700759294&amp;quot;,&lt;br /&gt;
&amp;quot;category&amp;quot;:&amp;quot;Kodex&amp;quot;,&lt;br /&gt;
&amp;quot;price&amp;quot;:77.27,&lt;br /&gt;
&amp;quot;quantity&amp;quot;:2&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CF7 tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
gtm4wp.contactForm7Submitted&lt;br /&gt;
&lt;br /&gt;
=== Analytics 4: Ecommerce Tracking ===&lt;br /&gt;
If Enhanced Ecommerce is enabled, then you can use the below Tag Manager template to setup Analytics 4 Ecommerce tracking for you.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just make sure to test it in case it becomes outdated!&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gtm4wp-ga4-container-elements.json]]&lt;br /&gt;
&lt;br /&gt;
Source: https://gtm4wp.com/how-to-articles/how-to-setup-enhanced-ecommerce-tracking-google-analytics-4-ga4-version&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to set the configuration tag to the Analytics account you want the information to be sent to, other than that it should all be done for you.&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager_for_WordPress_(Plugin)&amp;diff=424</id>
		<title>Google Tag Manager for WordPress (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager_for_WordPress_(Plugin)&amp;diff=424"/>
		<updated>2025-06-30T10:12:33Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Tag Manager for WordPress is a plugin that allows easy installation and tracking for the GTM.&lt;br /&gt;
&lt;br /&gt;
https://wordpress.org/plugins/duracelltomi-google-tag-manager/&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
=== New Tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
purchase&lt;br /&gt;
&lt;br /&gt;
Variables:&amp;lt;br /&amp;gt;&lt;br /&gt;
ecommerce.value&amp;lt;br /&amp;gt;&lt;br /&gt;
ecommerce.transaction_id&lt;br /&gt;
&lt;br /&gt;
Due to the event being very generic, it is advised to put a trigger rule for ecommerce.transaction_id &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
=== Classic tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
gtm4wp.orderCompleted&lt;br /&gt;
&lt;br /&gt;
transactionProducts.sku&lt;br /&gt;
&lt;br /&gt;
Example Data From GTM4WP Plugin:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dataLayer = [{&lt;br /&gt;
&amp;quot;event&amp;quot;:&amp;quot;transaction&amp;quot;,&lt;br /&gt;
&amp;quot;transactionId&amp;quot;:&amp;quot;100002486&amp;quot;,&lt;br /&gt;
&amp;quot;transactionDate&amp;quot;:&amp;quot;2015-09-03&amp;quot;,&lt;br /&gt;
&amp;quot;transactionTotal&amp;quot;:295,&lt;br /&gt;
&amp;quot;transactionShipping&amp;quot;:0,&lt;br /&gt;
&amp;quot;transactionTax&amp;quot;:26.82,&lt;br /&gt;
&amp;quot;transactionPaymentType&amp;quot;:&amp;quot;Rechnung&amp;quot;,&lt;br /&gt;
&amp;quot;transactionCurrency&amp;quot;:&amp;quot;EUR&amp;quot;,&lt;br /&gt;
&amp;quot;transactionShippingMethod&amp;quot;:&amp;quot;tablerate&amp;quot;,&lt;br /&gt;
&amp;quot;transactionProducts&amp;quot;:[&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;:&amp;quot;Handelsvertretergesetz&amp;quot;,&lt;br /&gt;
&amp;quot;sku&amp;quot;:&amp;quot;9783700760344&amp;quot;,&lt;br /&gt;
&amp;quot;category&amp;quot;:&amp;quot;Buch&amp;quot;,&lt;br /&gt;
&amp;quot;price&amp;quot;:113.64,&lt;br /&gt;
&amp;quot;quantity&amp;quot;:1&lt;br /&gt;
},&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;:&amp;quot;Steuerrecht&amp;quot;,&lt;br /&gt;
&amp;quot;sku&amp;quot;:&amp;quot;9783700759294&amp;quot;,&lt;br /&gt;
&amp;quot;category&amp;quot;:&amp;quot;Kodex&amp;quot;,&lt;br /&gt;
&amp;quot;price&amp;quot;:77.27,&lt;br /&gt;
&amp;quot;quantity&amp;quot;:2&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CF7 tracking ===&lt;br /&gt;
event:&amp;lt;br /&amp;gt;&lt;br /&gt;
gtm4wp.contactForm7Submitted&lt;br /&gt;
&lt;br /&gt;
=== Analytics 4: Ecommerce Tracking ===&lt;br /&gt;
If Enhanced Ecommerce is enabled, then you can use the below Tag Manager template to setup Analytics 4 Ecommerce tracking for you.&amp;lt;br /&amp;gt;&lt;br /&gt;
Just make sure to test it in case it becomes outdated!&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gtm4wp-ga4-container-elements.json]]&lt;br /&gt;
&lt;br /&gt;
Source: https://gtm4wp.com/how-to-articles/how-to-setup-enhanced-ecommerce-tracking-google-analytics-4-ga4-version&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to set the configuration tag to the Analytics account you want the information to be sent to, other than that it should all be done for you.&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Arlo&amp;diff=422</id>
		<title>Arlo</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Arlo&amp;diff=422"/>
		<updated>2025-04-03T10:16:06Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: Created page with &amp;quot;== Tracking In Tag Manager ==  Tracking:&amp;lt;br /&amp;gt; https://support.arlo.co/hc/en-gb/articles/360040819751-Google-Tag-Manager&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  Sales event &amp;#039;purchase&amp;#039;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
Tracking:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://support.arlo.co/hc/en-gb/articles/360040819751-Google-Tag-Manager&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sales event &#039;purchase&#039;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=421</id>
		<title>Google Tag Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=421"/>
		<updated>2025-04-03T10:13:14Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= GTM =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://tagmanager.google.com/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Google Tag Manager is a site container used for storing and triggering scripts.&amp;lt;br /&amp;gt;&lt;br /&gt;
These then can be used for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Systems =&lt;br /&gt;
&lt;br /&gt;
Below are links to pages for different systems.&lt;br /&gt;
These pages will include the methods used for installing the Tag Manager and the Conversion Value tracking.&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Self-Host System !! On-site Builder Systems !! Chat Systems !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[CS-Cart]] || [[Bigcommerce]] || [[CollectChat]] || [[Arlo]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Joomla]] || [[Ecwid]] || [[HubSpot Chat]] || [[Calendly]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 1.x]] || [[EKMPowershop]] || [[Jivo]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 2.x]] || [[MyshopBlocks]] || [[LiveChat]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[OpenCart]] || [[Roman Cart]] || [[PureChat]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Prestashop]] || [[Shopify]] || [[Tawk]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tag Manager Installation (Wordpress)|Wordpress]] || [[Squarespace]] || [[Tidio]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[X-Cart]] || [[Trill]] || [[ZenDesk]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Zen Cart]] || [[Wix]] || [[Zoho]] || &lt;br /&gt;
|-&lt;br /&gt;
||| [[Yell]] || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Useful Info =&lt;br /&gt;
&lt;br /&gt;
== Generic jQuery Form Listener ==&lt;br /&gt;
&lt;br /&gt;
If there is no instructions in the wiki for a particular system and/or plugin and the form uses Ajax to submit,&lt;br /&gt;
It may be worth trying this generic form listener.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
depending on what the jQuery is called when initialized you may need to change &amp;quot;jQuery&amp;quot; to &amp;quot;$&amp;quot; in the code below.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
create a custom HTML tag and change the index URL to what the URL is submitting to in the Ajax form.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/form/process/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
note: the form must be using the actual jQuery&#039;s Ajax method to perform the request for this to work&lt;br /&gt;
&lt;br /&gt;
== Unique Page Views ==&lt;br /&gt;
&lt;br /&gt;
You can track unique page views by storing a value in the sessionStorage variable.&lt;br /&gt;
This can be useful for tracking forms where only a thank you page is available track.&lt;br /&gt;
&lt;br /&gt;
Create a tag that only fires on the page you want to track&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var gtm_fs_count = 1;&lt;br /&gt;
  var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g, &#039;F_SLASH&#039;);&lt;br /&gt;
  if (sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     gtm_fs_count = gtm_fs_count+1;&lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count);&lt;br /&gt;
    &lt;br /&gt;
  } else if(!sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count) ;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a custom JS variable to retrieve the value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function() {&lt;br /&gt;
 var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g,&amp;quot;F_SLASH&amp;quot;);&lt;br /&gt;
 return parseInt(window.sessionStorage[page_path]); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then update the trigger to the variable is less than 2 as well as its existing conditions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cookie Consent Banner &amp;amp; Consent Mode V2 ==&lt;br /&gt;
&lt;br /&gt;
For clients that don&#039;t have this setup &amp;amp; functioning already, its possible to setup a consent mode friendly cookie banner using the below JS:&lt;br /&gt;
Within the .zip, the file is /build/cookieconsent.js&lt;br /&gt;
[[Media:Cookieconsent-master.zip|Cookieconsent-master.zip]]&lt;br /&gt;
&lt;br /&gt;
This file will need to be hosted somewhere that is accessible for the client site.&lt;br /&gt;
Once this has been done the below script will need to be added to the site, before GTM is loaded.&lt;br /&gt;
Make sure to swap cookieconsent.js with the location of the js file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;cookieconsent.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Define dataLayer and the gtag function.&lt;br /&gt;
    window.dataLayer = window.dataLayer || [];&lt;br /&gt;
    function gtag() { dataLayer.push(arguments); }&lt;br /&gt;
    window.CookieConsent.init({&lt;br /&gt;
        categories: {&lt;br /&gt;
            // Unique name.&lt;br /&gt;
            necessary: {&lt;br /&gt;
                needed: true,&lt;br /&gt;
                wanted: true,&lt;br /&gt;
                checked: true,&lt;br /&gt;
                // Language settings for categories.&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Strictly Necessary Cookies&#039;,&lt;br /&gt;
                            description: &#039;Cookies Required for the site to function as intended.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            analytics: {&lt;br /&gt;
                needed: false,&lt;br /&gt;
                wanted: false,&lt;br /&gt;
                checked: false,&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Analytics&#039;,&lt;br /&gt;
                            description: &#039;Cookies used by Google &amp;amp; other 3rd party analytics services.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        consentModeControls: {&lt;br /&gt;
            ad_storage: &#039;analytics&#039;,&lt;br /&gt;
            ad_user_data: &#039;analytics&#039;,&lt;br /&gt;
            ad_personalization: &#039;analytics&#039;,&lt;br /&gt;
            analytics_storage: &#039;analytics&#039;&lt;br /&gt;
        },&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    if (localStorage.getItem(&#039;consentMode&#039;) === null) {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
            &#039;ad_storage&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_user_data&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_personalization&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;analytics_storage&#039;: &#039;denied&#039;&lt;br /&gt;
        });&lt;br /&gt;
    } else {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, JSON.parse(localStorage.getItem(&#039;consentMode&#039;)));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional, but to make it look slightly better you could reduce the opacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    #cconsent-bar {&lt;br /&gt;
      opacity: 0.9;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=420</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=420"/>
		<updated>2025-04-01T15:57:45Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the gtm4wp:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=419</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=419"/>
		<updated>2025-04-01T15:16:13Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking Other Wordpress Contact Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the Duracell Tomi Plugin:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WS Forms ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://wsform.com/knowledgebase/conversion-tracking/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go into admin, click to edit the required form.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the form edit view, click the lightning icon (actions).&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a new action for conversion tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select Google Tag Manager (DataLayer)&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;event&amp;quot; in the &amp;quot;Key&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
Enter &amp;quot;ws-form-submitted&amp;quot; in the &amp;quot;Value&amp;quot; field.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Then publish the form.&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Shopify&amp;diff=418</id>
		<title>Shopify</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Shopify&amp;diff=418"/>
		<updated>2025-03-26T14:31:49Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* File Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Shopify Pixel =&lt;br /&gt;
&lt;br /&gt;
The old method is due to be deprecated in Dec-24, so this will only be available until then. &amp;lt;/br&amp;gt;&lt;br /&gt;
New Shopify sites also appear to have checkout scripts disabled by default. &amp;lt;/br&amp;gt;&lt;br /&gt;
The new method for adding tracking to Shopify sites is through a Custom Pixel. &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on Shopifys documentation:&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels/gtm-tutorial Creating a GTM pixel]&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://shopify.dev/docs/api/web-pixels-api/pixel-privacy Pixel privacy documentation]&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;noscript&amp;gt; section needs to be added to the &amp;lt;body&amp;gt; through theme.liquid via Online Store &amp;gt; Edit.&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 - Go to Settings &amp;gt; Customer Events &amp;gt; Add Custom Pixel.&lt;br /&gt;
 - Set the Customer Privacy settings to Not required.&lt;br /&gt;
 - Set Data Sale to Data collected does not qualify as data sale.&lt;br /&gt;
 - Add the below code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Define dataLayer and the gtag function.&lt;br /&gt;
window.dataLayer = window.dataLayer || [];&lt;br /&gt;
function gtag(){dataLayer.push(arguments);}&lt;br /&gt;
&lt;br /&gt;
//Initialize GTM tag&lt;br /&gt;
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({&#039;gtm.start&#039;:&lt;br /&gt;
new Date().getTime(),event:&#039;gtm.js&#039;});var f=d.getElementsByTagName(s)[0],&lt;br /&gt;
j=d.createElement(s),dl=l!=&#039;dataLayer&#039;?&#039;&amp;amp;l=&#039;+l:&#039;&#039;;j.async=true;j.src=&lt;br /&gt;
&#039;https://www.googletagmanager.com/gtm.js?id=&#039;+i+dl;f.parentNode.insertBefore(j,f);&lt;br /&gt;
})(window,document,&#039;script&#039;,&#039;dataLayer&#039;, &#039;GTM-XXXXXX&#039;);&lt;br /&gt;
&lt;br /&gt;
let customerPrivacyStatus = init.customerPrivacy;&lt;br /&gt;
let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
//Google Consent Mode v2&lt;br /&gt;
gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
  &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
  &#039;analytics_storage&#039;: analytics_permission,&lt;br /&gt;
  &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
  &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Use the customerPrivacy Standard API to subscribe to consent collected events and update the status&lt;br /&gt;
api.customerPrivacy.subscribe(&#039;visitorConsentCollected&#039;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  let customerPrivacyStatus = event.customerPrivacy;&lt;br /&gt;
  let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
  let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
  gtag(&#039;consent&#039;, &#039;update&#039;, {&lt;br /&gt;
    &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
    &#039;analytics_storage&#039;: analytics_permission ,&lt;br /&gt;
    &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
    &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
  });  &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//subscribe to events&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_completed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_completed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Ecommerce events that could be useful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;payment_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;payment_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_shipping_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_shipping_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_address_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_address_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_contact_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_contact_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_started&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_started&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_added_to_cart&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_added_to_cart&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    price: event.data?.cartLine?.merchandise?.price?.amount,&lt;br /&gt;
    currency:  event.data?.cartLine?.cost?.totalAmount?.currencyCode,&lt;br /&gt;
    product_id: event.data?.cartLine?.merchandise?.product?.id + &#039;_&#039; + event.data?.cartLine?.merchandise?.id,&lt;br /&gt;
    product_title: event.data?.cartLine?.merchandise?.product?.title,&lt;br /&gt;
    quantity: event.data?.cartLine?.quantity,&lt;br /&gt;
    total_cost: event.data?.cartLine?.cost?.totalAmount?.amount,&lt;br /&gt;
    test: event.data,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;cart_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;cart_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    total_cost: event.data?.cart?.cost?.totalAmount?.amount,&lt;br /&gt;
    quantity: event.data?.cart?.totalQuantity,&lt;br /&gt;
    cart_id: event.data?.cart?.id,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;page_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;page_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    page_title: event.context.document.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    product_id: event.data?.productVariant?.product?.id + &#039;_&#039; + event.data?.productVariant?.id,&lt;br /&gt;
    product_title: event.data?.productVariant?.title,&lt;br /&gt;
    product_sku: event.data?.productVariant?.sku,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;search_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;search_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    query: event.data?.searchResult?.query,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;collection_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;collection_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    collection_id: event.data?.collection?.id,&lt;br /&gt;
    collection_title: event.data?.collection?.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File Location ==&lt;br /&gt;
&lt;br /&gt;
The Shopify pixel loads the JS into a JS file which is loaded by the browser.&amp;lt;br /&amp;gt;&lt;br /&gt;
The location of this can be built by using data from the home web page.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://&amp;lt;&amp;lt;domain&amp;gt;&amp;gt;/wpm@&amp;lt;&amp;lt;wpm_id&amp;gt;&amp;gt;/custom/web-pixel-&amp;lt;&amp;lt;pixel_id&amp;gt;&amp;gt;@&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;/sandbox/modern/&lt;br /&gt;
&lt;br /&gt;
wpm_id - is the version of the wpm (Web Pixel Manager), this is the same across all sites and will change when the wpm is updated by shopify.&lt;br /&gt;
pixel_id - this is found via the JSON below that is on the site&lt;br /&gt;
script_version - this is found via the JSON below that is on the site&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;id&amp;quot;:&amp;quot;&amp;lt;&amp;lt;pixel_id &amp;gt;&amp;gt;&amp;quot;,&amp;quot;eventPayloadVersion&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;runtimeContext&amp;quot;:&amp;quot;LAX&amp;quot;,&amp;quot;scriptVersion&amp;quot;:&amp;quot;&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;CUSTOM&amp;quot;,&amp;quot;privacyPurposes&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;GTM + Value Tracking&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Add Tag Manager to theme:&lt;br /&gt;
Modify Theme&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;online store&amp;quot; -&amp;gt; &amp;quot;...&amp;quot; or &amp;quot;Actions&amp;quot; -&amp;gt; &amp;quot;edit HTML / CSS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify theme.liquid&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking Code ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;settings&amp;quot; -&amp;gt; &amp;quot;checkout&amp;quot; -&amp;gt; &amp;quot;additional settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;order_id&#039; : &#039;{{ order_number }}&#039;, &#039;order_value&#039; : &#039;{{ total_price | money_without_currency }}&#039;, &#039;event&#039; : &#039;order-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: if testing without &amp;quot;{% if first_time_accessed %}&amp;quot; on a order that has already converted, the order ID will not show&lt;br /&gt;
&lt;br /&gt;
to add product ids add within the code above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dataLayer.push({ &#039;product_ids&#039; : [{% for line_item in line_items %}{{ line_item.product_id }}{% unless forloop.last == true %}, {% endunless %}{% endfor %}] });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: This was made for dynamic re-marketing, for analytics 4 go to the section below&lt;br /&gt;
&lt;br /&gt;
=== Tracking Contact Page  ===&lt;br /&gt;
&lt;br /&gt;
In the snippets section, go to &amp;quot;form-status.liquid&amp;quot; or &amp;quot;contact.liquid&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Find the snippet that shows the success text ( in-between {%- if form.posted_successfully? -%}{%- endif -%} ),&lt;br /&gt;
Then add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Product Feed =&lt;br /&gt;
&lt;br /&gt;
The below App is free to use &amp;amp; should do most of the setup for you:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://apps.shopify.com/google&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing the App a Google account with access to the Merchant Centre needs to sign in.&amp;lt;br /&amp;gt;&lt;br /&gt;
DO NOT sign in using one of our Master email addresses, instead you can either:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Ask the client to do this, if they don&#039;t have access to Merchant Center we can try to add them.&lt;br /&gt;
 - Create a new email address that only has access to this Merchant Center &amp;amp; sign in with this instead.&lt;br /&gt;
&lt;br /&gt;
Then the below needs to be done, in this order otherwise it won&#039;t send the products through &amp;amp; you&#039;ll have to start from scratch:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Make sure the Store requirements are met &amp;amp; confirm these, if they aren&#039;t then send this back to the client so they can add whats necessary.&lt;br /&gt;
 - Under Product Feed, start the setup process.&lt;br /&gt;
 - Connect the Merchant Centre on the settings tab.&lt;br /&gt;
 - Specify the Target Market &amp;amp; set the Shipping settings to Manual (These will need to be added to Merchant Center by someone afterwards).&lt;br /&gt;
If this has been done correctly then the products should now be available within the Merchant Center account.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is for Reference, Do not use!&amp;lt;br /&amp;gt;&lt;br /&gt;
Alternatively, Shopify does provide you with the Product feed URL for your store.&amp;lt;br /&amp;gt;&lt;br /&gt;
To access this, you will need to append .atom to either all of your collections or to a specific collection URL.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/all.atom&amp;quot;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/collectionname.atom&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Events for Analytics 4 =&lt;br /&gt;
&lt;br /&gt;
View Item: &amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to product-template.liquid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
    event: &amp;quot;view_item&amp;quot;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
      currency: &amp;quot;GBP&amp;quot;,&lt;br /&gt;
      items: [&lt;br /&gt;
        {&lt;br /&gt;
          item_id: {{ product.id }},&lt;br /&gt;
          item_name: &amp;quot;{{ product.title }}&amp;quot;,&lt;br /&gt;
         {% if product.vendor %} item_brand: &amp;quot;{{ product.vendor }}&amp;quot;, {% endif %}&lt;br /&gt;
          price: {{ product.price | money_without_currency }},&lt;br /&gt;
         {% if product.type %} item_category: &amp;quot;{{ product.type }}&amp;quot;, {% endif %}&lt;br /&gt;
          google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
          id: &amp;quot;{{ product.id }}&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add To Cart:&amp;lt;br /&amp;gt;&lt;br /&gt;
The below listener can be added to GTM, this should send add_to_cart events to GTM for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings, data ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/cart/add&amp;quot;)) {          &lt;br /&gt;
          &lt;br /&gt;
          var items = [];&lt;br /&gt;
          items.push({&lt;br /&gt;
            item_id: data.product_id,&lt;br /&gt;
            item_name: data.title,&lt;br /&gt;
            item_category: data.product_type,&lt;br /&gt;
            price: ( data.price / 100 ),&lt;br /&gt;
            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
            id: data.product_id&lt;br /&gt;
          });&lt;br /&gt;
          &lt;br /&gt;
          if (typeof data.brand != &amp;quot;undefined&amp;quot;) items[0][&#039;item_brand&#039;] = data.brand;&lt;br /&gt;
          &lt;br /&gt;
          var dataLayer = window.dataLayer || [];&lt;br /&gt;
          dataLayer.push({&lt;br /&gt;
            event: &#039;add_to_cart&#039;,&lt;br /&gt;
            ecommerce: {&lt;br /&gt;
              currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
              items: items&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purchases:&amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to the Settings &amp;gt; Checkout &amp;gt; Additional Scripts section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
	var items = [];&lt;br /&gt;
	var temp = {};&lt;br /&gt;
&lt;br /&gt;
	{% for line_item in line_items %}&lt;br /&gt;
		temp = {&lt;br /&gt;
		            item_id: {{ line_item.product.id }},&lt;br /&gt;
		            item_name: &amp;quot;{{ line_item.title }}&amp;quot;,&lt;br /&gt;
		            price: {{ line_item.final_line_price | money_without_currency }},&lt;br /&gt;
		            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
		            id: {{ line_item.product.id }},&lt;br /&gt;
                            quantity: {{ line_item.quantity }}&lt;br /&gt;
&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.type %} &lt;br /&gt;
			temp[&#039;item_category&#039;] = &amp;quot;{{ line_item.product.type }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.vendor %} &lt;br /&gt;
			temp[&#039;item_brand&#039;] = &amp;quot;{{ line_item.product.vendor }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		items.push(temp);&lt;br /&gt;
		&lt;br /&gt;
	{% endfor %}&lt;br /&gt;
&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
  	event: &#039;purchase&#039;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
    	affiliation: &#039;Online Store&#039;,&lt;br /&gt;
    	transaction_id: &#039;{{ order_number }}&#039;,&lt;br /&gt;
    	value: &#039;{{ total_price | money_without_currency }}&#039;,&lt;br /&gt;
    	tax: &#039;{{ tax_price | money_without_currency }}&#039;,&lt;br /&gt;
    	shipping: &#039;{{ shipping_price | money_without_currency}}&#039;,&lt;br /&gt;
    	currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
      items: items&lt;br /&gt;
    }&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Event Tag &amp;amp; Variables can be setup with the below template:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Shopify-ga4-container-elements.json]]&lt;br /&gt;
&lt;br /&gt;
= Shopify Links =&lt;br /&gt;
Cheat sheet for Variables: &amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.shopify.co.uk/partners/shopify-cheat-sheet&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Shopify&amp;diff=417</id>
		<title>Shopify</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Shopify&amp;diff=417"/>
		<updated>2025-03-26T14:31:36Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* File Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Shopify Pixel =&lt;br /&gt;
&lt;br /&gt;
The old method is due to be deprecated in Dec-24, so this will only be available until then. &amp;lt;/br&amp;gt;&lt;br /&gt;
New Shopify sites also appear to have checkout scripts disabled by default. &amp;lt;/br&amp;gt;&lt;br /&gt;
The new method for adding tracking to Shopify sites is through a Custom Pixel. &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on Shopifys documentation:&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels/gtm-tutorial Creating a GTM pixel]&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://shopify.dev/docs/api/web-pixels-api/pixel-privacy Pixel privacy documentation]&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;noscript&amp;gt; section needs to be added to the &amp;lt;body&amp;gt; through theme.liquid via Online Store &amp;gt; Edit.&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 - Go to Settings &amp;gt; Customer Events &amp;gt; Add Custom Pixel.&lt;br /&gt;
 - Set the Customer Privacy settings to Not required.&lt;br /&gt;
 - Set Data Sale to Data collected does not qualify as data sale.&lt;br /&gt;
 - Add the below code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Define dataLayer and the gtag function.&lt;br /&gt;
window.dataLayer = window.dataLayer || [];&lt;br /&gt;
function gtag(){dataLayer.push(arguments);}&lt;br /&gt;
&lt;br /&gt;
//Initialize GTM tag&lt;br /&gt;
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({&#039;gtm.start&#039;:&lt;br /&gt;
new Date().getTime(),event:&#039;gtm.js&#039;});var f=d.getElementsByTagName(s)[0],&lt;br /&gt;
j=d.createElement(s),dl=l!=&#039;dataLayer&#039;?&#039;&amp;amp;l=&#039;+l:&#039;&#039;;j.async=true;j.src=&lt;br /&gt;
&#039;https://www.googletagmanager.com/gtm.js?id=&#039;+i+dl;f.parentNode.insertBefore(j,f);&lt;br /&gt;
})(window,document,&#039;script&#039;,&#039;dataLayer&#039;, &#039;GTM-XXXXXX&#039;);&lt;br /&gt;
&lt;br /&gt;
let customerPrivacyStatus = init.customerPrivacy;&lt;br /&gt;
let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
//Google Consent Mode v2&lt;br /&gt;
gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
  &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
  &#039;analytics_storage&#039;: analytics_permission,&lt;br /&gt;
  &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
  &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Use the customerPrivacy Standard API to subscribe to consent collected events and update the status&lt;br /&gt;
api.customerPrivacy.subscribe(&#039;visitorConsentCollected&#039;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  let customerPrivacyStatus = event.customerPrivacy;&lt;br /&gt;
  let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
  let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
  gtag(&#039;consent&#039;, &#039;update&#039;, {&lt;br /&gt;
    &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
    &#039;analytics_storage&#039;: analytics_permission ,&lt;br /&gt;
    &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
    &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
  });  &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//subscribe to events&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_completed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_completed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Ecommerce events that could be useful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;payment_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;payment_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_shipping_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_shipping_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_address_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_address_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_contact_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_contact_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_started&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_started&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_added_to_cart&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_added_to_cart&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    price: event.data?.cartLine?.merchandise?.price?.amount,&lt;br /&gt;
    currency:  event.data?.cartLine?.cost?.totalAmount?.currencyCode,&lt;br /&gt;
    product_id: event.data?.cartLine?.merchandise?.product?.id + &#039;_&#039; + event.data?.cartLine?.merchandise?.id,&lt;br /&gt;
    product_title: event.data?.cartLine?.merchandise?.product?.title,&lt;br /&gt;
    quantity: event.data?.cartLine?.quantity,&lt;br /&gt;
    total_cost: event.data?.cartLine?.cost?.totalAmount?.amount,&lt;br /&gt;
    test: event.data,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;cart_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;cart_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    total_cost: event.data?.cart?.cost?.totalAmount?.amount,&lt;br /&gt;
    quantity: event.data?.cart?.totalQuantity,&lt;br /&gt;
    cart_id: event.data?.cart?.id,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;page_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;page_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    page_title: event.context.document.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    product_id: event.data?.productVariant?.product?.id + &#039;_&#039; + event.data?.productVariant?.id,&lt;br /&gt;
    product_title: event.data?.productVariant?.title,&lt;br /&gt;
    product_sku: event.data?.productVariant?.sku,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;search_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;search_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    query: event.data?.searchResult?.query,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;collection_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;collection_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    collection_id: event.data?.collection?.id,&lt;br /&gt;
    collection_title: event.data?.collection?.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File Location ==&lt;br /&gt;
&lt;br /&gt;
The Shopify pixel loads the JS into a JS file which is loaded by the browser.&amp;lt;br /&amp;gt;&lt;br /&gt;
The location of this can be built by using data from the home web page.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://&amp;lt;&amp;lt;domain&amp;gt;&amp;gt;/wpm@&amp;lt;&amp;lt;wpm_id&amp;gt;&amp;gt;/custom/web-pixel-&amp;lt;&amp;lt;pixel_id&amp;gt;&amp;gt;@&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;/sandbox/modern/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wpm_id - is the version of the wpm (Web Pixel Manager), this is the same across all sites and will change when the wpm is updated by shopify.&lt;br /&gt;
pixel_id - this is found via the JSON below that is on the site&lt;br /&gt;
script_version - this is found via the JSON below that is on the site&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;id&amp;quot;:&amp;quot;&amp;lt;&amp;lt;pixel_id &amp;gt;&amp;gt;&amp;quot;,&amp;quot;eventPayloadVersion&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;runtimeContext&amp;quot;:&amp;quot;LAX&amp;quot;,&amp;quot;scriptVersion&amp;quot;:&amp;quot;&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;CUSTOM&amp;quot;,&amp;quot;privacyPurposes&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;GTM + Value Tracking&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Add Tag Manager to theme:&lt;br /&gt;
Modify Theme&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;online store&amp;quot; -&amp;gt; &amp;quot;...&amp;quot; or &amp;quot;Actions&amp;quot; -&amp;gt; &amp;quot;edit HTML / CSS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify theme.liquid&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking Code ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;settings&amp;quot; -&amp;gt; &amp;quot;checkout&amp;quot; -&amp;gt; &amp;quot;additional settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;order_id&#039; : &#039;{{ order_number }}&#039;, &#039;order_value&#039; : &#039;{{ total_price | money_without_currency }}&#039;, &#039;event&#039; : &#039;order-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: if testing without &amp;quot;{% if first_time_accessed %}&amp;quot; on a order that has already converted, the order ID will not show&lt;br /&gt;
&lt;br /&gt;
to add product ids add within the code above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dataLayer.push({ &#039;product_ids&#039; : [{% for line_item in line_items %}{{ line_item.product_id }}{% unless forloop.last == true %}, {% endunless %}{% endfor %}] });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: This was made for dynamic re-marketing, for analytics 4 go to the section below&lt;br /&gt;
&lt;br /&gt;
=== Tracking Contact Page  ===&lt;br /&gt;
&lt;br /&gt;
In the snippets section, go to &amp;quot;form-status.liquid&amp;quot; or &amp;quot;contact.liquid&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Find the snippet that shows the success text ( in-between {%- if form.posted_successfully? -%}{%- endif -%} ),&lt;br /&gt;
Then add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Product Feed =&lt;br /&gt;
&lt;br /&gt;
The below App is free to use &amp;amp; should do most of the setup for you:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://apps.shopify.com/google&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing the App a Google account with access to the Merchant Centre needs to sign in.&amp;lt;br /&amp;gt;&lt;br /&gt;
DO NOT sign in using one of our Master email addresses, instead you can either:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Ask the client to do this, if they don&#039;t have access to Merchant Center we can try to add them.&lt;br /&gt;
 - Create a new email address that only has access to this Merchant Center &amp;amp; sign in with this instead.&lt;br /&gt;
&lt;br /&gt;
Then the below needs to be done, in this order otherwise it won&#039;t send the products through &amp;amp; you&#039;ll have to start from scratch:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Make sure the Store requirements are met &amp;amp; confirm these, if they aren&#039;t then send this back to the client so they can add whats necessary.&lt;br /&gt;
 - Under Product Feed, start the setup process.&lt;br /&gt;
 - Connect the Merchant Centre on the settings tab.&lt;br /&gt;
 - Specify the Target Market &amp;amp; set the Shipping settings to Manual (These will need to be added to Merchant Center by someone afterwards).&lt;br /&gt;
If this has been done correctly then the products should now be available within the Merchant Center account.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is for Reference, Do not use!&amp;lt;br /&amp;gt;&lt;br /&gt;
Alternatively, Shopify does provide you with the Product feed URL for your store.&amp;lt;br /&amp;gt;&lt;br /&gt;
To access this, you will need to append .atom to either all of your collections or to a specific collection URL.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/all.atom&amp;quot;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/collectionname.atom&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Events for Analytics 4 =&lt;br /&gt;
&lt;br /&gt;
View Item: &amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to product-template.liquid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
    event: &amp;quot;view_item&amp;quot;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
      currency: &amp;quot;GBP&amp;quot;,&lt;br /&gt;
      items: [&lt;br /&gt;
        {&lt;br /&gt;
          item_id: {{ product.id }},&lt;br /&gt;
          item_name: &amp;quot;{{ product.title }}&amp;quot;,&lt;br /&gt;
         {% if product.vendor %} item_brand: &amp;quot;{{ product.vendor }}&amp;quot;, {% endif %}&lt;br /&gt;
          price: {{ product.price | money_without_currency }},&lt;br /&gt;
         {% if product.type %} item_category: &amp;quot;{{ product.type }}&amp;quot;, {% endif %}&lt;br /&gt;
          google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
          id: &amp;quot;{{ product.id }}&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add To Cart:&amp;lt;br /&amp;gt;&lt;br /&gt;
The below listener can be added to GTM, this should send add_to_cart events to GTM for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings, data ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/cart/add&amp;quot;)) {          &lt;br /&gt;
          &lt;br /&gt;
          var items = [];&lt;br /&gt;
          items.push({&lt;br /&gt;
            item_id: data.product_id,&lt;br /&gt;
            item_name: data.title,&lt;br /&gt;
            item_category: data.product_type,&lt;br /&gt;
            price: ( data.price / 100 ),&lt;br /&gt;
            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
            id: data.product_id&lt;br /&gt;
          });&lt;br /&gt;
          &lt;br /&gt;
          if (typeof data.brand != &amp;quot;undefined&amp;quot;) items[0][&#039;item_brand&#039;] = data.brand;&lt;br /&gt;
          &lt;br /&gt;
          var dataLayer = window.dataLayer || [];&lt;br /&gt;
          dataLayer.push({&lt;br /&gt;
            event: &#039;add_to_cart&#039;,&lt;br /&gt;
            ecommerce: {&lt;br /&gt;
              currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
              items: items&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purchases:&amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to the Settings &amp;gt; Checkout &amp;gt; Additional Scripts section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
	var items = [];&lt;br /&gt;
	var temp = {};&lt;br /&gt;
&lt;br /&gt;
	{% for line_item in line_items %}&lt;br /&gt;
		temp = {&lt;br /&gt;
		            item_id: {{ line_item.product.id }},&lt;br /&gt;
		            item_name: &amp;quot;{{ line_item.title }}&amp;quot;,&lt;br /&gt;
		            price: {{ line_item.final_line_price | money_without_currency }},&lt;br /&gt;
		            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
		            id: {{ line_item.product.id }},&lt;br /&gt;
                            quantity: {{ line_item.quantity }}&lt;br /&gt;
&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.type %} &lt;br /&gt;
			temp[&#039;item_category&#039;] = &amp;quot;{{ line_item.product.type }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.vendor %} &lt;br /&gt;
			temp[&#039;item_brand&#039;] = &amp;quot;{{ line_item.product.vendor }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		items.push(temp);&lt;br /&gt;
		&lt;br /&gt;
	{% endfor %}&lt;br /&gt;
&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
  	event: &#039;purchase&#039;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
    	affiliation: &#039;Online Store&#039;,&lt;br /&gt;
    	transaction_id: &#039;{{ order_number }}&#039;,&lt;br /&gt;
    	value: &#039;{{ total_price | money_without_currency }}&#039;,&lt;br /&gt;
    	tax: &#039;{{ tax_price | money_without_currency }}&#039;,&lt;br /&gt;
    	shipping: &#039;{{ shipping_price | money_without_currency}}&#039;,&lt;br /&gt;
    	currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
      items: items&lt;br /&gt;
    }&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Event Tag &amp;amp; Variables can be setup with the below template:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Shopify-ga4-container-elements.json]]&lt;br /&gt;
&lt;br /&gt;
= Shopify Links =&lt;br /&gt;
Cheat sheet for Variables: &amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.shopify.co.uk/partners/shopify-cheat-sheet&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Shopify&amp;diff=416</id>
		<title>Shopify</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Shopify&amp;diff=416"/>
		<updated>2025-03-26T14:30:35Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Shopify Pixel =&lt;br /&gt;
&lt;br /&gt;
The old method is due to be deprecated in Dec-24, so this will only be available until then. &amp;lt;/br&amp;gt;&lt;br /&gt;
New Shopify sites also appear to have checkout scripts disabled by default. &amp;lt;/br&amp;gt;&lt;br /&gt;
The new method for adding tracking to Shopify sites is through a Custom Pixel. &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on Shopifys documentation:&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels/gtm-tutorial Creating a GTM pixel]&amp;lt;/br&amp;gt;&lt;br /&gt;
[https://shopify.dev/docs/api/web-pixels-api/pixel-privacy Pixel privacy documentation]&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;noscript&amp;gt; section needs to be added to the &amp;lt;body&amp;gt; through theme.liquid via Online Store &amp;gt; Edit.&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 - Go to Settings &amp;gt; Customer Events &amp;gt; Add Custom Pixel.&lt;br /&gt;
 - Set the Customer Privacy settings to Not required.&lt;br /&gt;
 - Set Data Sale to Data collected does not qualify as data sale.&lt;br /&gt;
 - Add the below code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Define dataLayer and the gtag function.&lt;br /&gt;
window.dataLayer = window.dataLayer || [];&lt;br /&gt;
function gtag(){dataLayer.push(arguments);}&lt;br /&gt;
&lt;br /&gt;
//Initialize GTM tag&lt;br /&gt;
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({&#039;gtm.start&#039;:&lt;br /&gt;
new Date().getTime(),event:&#039;gtm.js&#039;});var f=d.getElementsByTagName(s)[0],&lt;br /&gt;
j=d.createElement(s),dl=l!=&#039;dataLayer&#039;?&#039;&amp;amp;l=&#039;+l:&#039;&#039;;j.async=true;j.src=&lt;br /&gt;
&#039;https://www.googletagmanager.com/gtm.js?id=&#039;+i+dl;f.parentNode.insertBefore(j,f);&lt;br /&gt;
})(window,document,&#039;script&#039;,&#039;dataLayer&#039;, &#039;GTM-XXXXXX&#039;);&lt;br /&gt;
&lt;br /&gt;
let customerPrivacyStatus = init.customerPrivacy;&lt;br /&gt;
let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
//Google Consent Mode v2&lt;br /&gt;
gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
  &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
  &#039;analytics_storage&#039;: analytics_permission,&lt;br /&gt;
  &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
  &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Use the customerPrivacy Standard API to subscribe to consent collected events and update the status&lt;br /&gt;
api.customerPrivacy.subscribe(&#039;visitorConsentCollected&#039;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  let customerPrivacyStatus = event.customerPrivacy;&lt;br /&gt;
  let ad_permission = ( customerPrivacyStatus.marketingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
  let analytics_permission = ( customerPrivacyStatus.analyticsProcessingAllowed ? &#039;granted&#039; : &#039;denied&#039; );&lt;br /&gt;
&lt;br /&gt;
  gtag(&#039;consent&#039;, &#039;update&#039;, {&lt;br /&gt;
    &#039;ad_storage&#039;: ad_permission,&lt;br /&gt;
    &#039;analytics_storage&#039;: analytics_permission ,&lt;br /&gt;
    &#039;ad_user_data&#039;: ad_permission,&lt;br /&gt;
    &#039;ad_personalization&#039;: ad_permission,&lt;br /&gt;
  });  &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//subscribe to events&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_completed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_completed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Ecommerce events that could be useful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;payment_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;payment_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_shipping_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_shipping_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_address_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_address_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_contact_info_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_contact_info_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;checkout_started&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;checkout_started&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    token: event.data?.checkout?.token,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    email: event.data?.checkout?.email,&lt;br /&gt;
    phone: event.data?.checkout?.phone,&lt;br /&gt;
    first_name: event.data?.checkout?.shippingAddress?.firstName,&lt;br /&gt;
    last_name: event.data?.checkout?.shippingAddress?.lastName,&lt;br /&gt;
    address1: event.data?.checkout?.shippingAddress?.address1,&lt;br /&gt;
    address2: event.data?.checkout?.shippingAddress?.address2,&lt;br /&gt;
    city: event.data?.checkout?.shippingAddress?.city,&lt;br /&gt;
    country: event.data?.checkout?.shippingAddress?.country,&lt;br /&gt;
    countryCode: event.data?.checkout?.shippingAddress?.countryCode,&lt;br /&gt;
    province: event.data?.checkout?.shippingAddress?.province,&lt;br /&gt;
    provinceCode: event.data?.checkout?.shippingAddress?.provinceCode,&lt;br /&gt;
    zip: event.data?.checkout?.shippingAddress?.zip,&lt;br /&gt;
    orderId: event.data?.checkout?.order?.id,&lt;br /&gt;
    currency: event.data?.checkout?.currencyCode,&lt;br /&gt;
    subtotal: event.data?.checkout?.subtotalPrice?.amount,&lt;br /&gt;
    shipping: event.data?.checkout?.shippingLine?.price?.amount,&lt;br /&gt;
    value: event.data?.checkout?.totalPrice?.amount,&lt;br /&gt;
    tax: event.data?.checkout?.totalTax?.amount,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_added_to_cart&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_added_to_cart&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    price: event.data?.cartLine?.merchandise?.price?.amount,&lt;br /&gt;
    currency:  event.data?.cartLine?.cost?.totalAmount?.currencyCode,&lt;br /&gt;
    product_id: event.data?.cartLine?.merchandise?.product?.id + &#039;_&#039; + event.data?.cartLine?.merchandise?.id,&lt;br /&gt;
    product_title: event.data?.cartLine?.merchandise?.product?.title,&lt;br /&gt;
    quantity: event.data?.cartLine?.quantity,&lt;br /&gt;
    total_cost: event.data?.cartLine?.cost?.totalAmount?.amount,&lt;br /&gt;
    test: event.data,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;cart_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;cart_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    total_cost: event.data?.cart?.cost?.totalAmount?.amount,&lt;br /&gt;
    quantity: event.data?.cart?.totalQuantity,&lt;br /&gt;
    cart_id: event.data?.cart?.id,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;page_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;page_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    page_title: event.context.document.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;product_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;product_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    product_id: event.data?.productVariant?.product?.id + &#039;_&#039; + event.data?.productVariant?.id,&lt;br /&gt;
    product_title: event.data?.productVariant?.title,&lt;br /&gt;
    product_sku: event.data?.productVariant?.sku,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;search_submitted&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;search_submitted&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    query: event.data?.searchResult?.query,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
analytics.subscribe(&amp;quot;collection_viewed&amp;quot;, (event) =&amp;gt; {&lt;br /&gt;
  window.dataLayer.push({&lt;br /&gt;
    event: &amp;quot;collection_viewed&amp;quot;,&lt;br /&gt;
    timestamp: event.timestamp,&lt;br /&gt;
    id: event.id,&lt;br /&gt;
    client_id: event.clientId,&lt;br /&gt;
    url: event.context.document.location.href,&lt;br /&gt;
    collection_id: event.data?.collection?.id,&lt;br /&gt;
    collection_title: event.data?.collection?.title,&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File Location ==&lt;br /&gt;
&lt;br /&gt;
The Shopify pixel loads the JS into a JS file which is loaded by the browser.&amp;lt;br /&amp;gt;&lt;br /&gt;
The location of this can be built by using data from the home web page.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
https://&amp;lt;&amp;lt;domain&amp;gt;&amp;gt;/wpm@&amp;lt;&amp;lt;wpm_id&amp;gt;&amp;gt;/custom/web-pixel-&amp;lt;&amp;lt;pixel_id&amp;gt;&amp;gt;@&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;/sandbox/modern/&lt;br /&gt;
&lt;br /&gt;
wpm_id - is the version of the wpm (Web Pixel Manager), this is the same across all sites and will change when the wpm is updated by shopify.&lt;br /&gt;
pixel_id - this is found via the JSON below that is on the site&lt;br /&gt;
script_version - this is found via the JSON below that is on the site&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;id&amp;quot;:&amp;quot;&amp;lt;&amp;lt;pixel_id &amp;gt;&amp;gt;&amp;quot;,&amp;quot;eventPayloadVersion&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;runtimeContext&amp;quot;:&amp;quot;LAX&amp;quot;,&amp;quot;scriptVersion&amp;quot;:&amp;quot;&amp;lt;&amp;lt;script_version&amp;gt;&amp;gt;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;CUSTOM&amp;quot;,&amp;quot;privacyPurposes&amp;quot;:[],&amp;quot;name&amp;quot;:&amp;quot;GTM + Value Tracking&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Add Tag Manager to theme:&lt;br /&gt;
Modify Theme&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;online store&amp;quot; -&amp;gt; &amp;quot;...&amp;quot; or &amp;quot;Actions&amp;quot; -&amp;gt; &amp;quot;edit HTML / CSS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify theme.liquid&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking Code ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager will also need to be added to Checkout&#039;s additional settings to track conversions&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;settings&amp;quot; -&amp;gt; &amp;quot;checkout&amp;quot; -&amp;gt; &amp;quot;additional settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;order_id&#039; : &#039;{{ order_number }}&#039;, &#039;order_value&#039; : &#039;{{ total_price | money_without_currency }}&#039;, &#039;event&#039; : &#039;order-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: if testing without &amp;quot;{% if first_time_accessed %}&amp;quot; on a order that has already converted, the order ID will not show&lt;br /&gt;
&lt;br /&gt;
to add product ids add within the code above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dataLayer.push({ &#039;product_ids&#039; : [{% for line_item in line_items %}{{ line_item.product_id }}{% unless forloop.last == true %}, {% endunless %}{% endfor %}] });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Note: This was made for dynamic re-marketing, for analytics 4 go to the section below&lt;br /&gt;
&lt;br /&gt;
=== Tracking Contact Page  ===&lt;br /&gt;
&lt;br /&gt;
In the snippets section, go to &amp;quot;form-status.liquid&amp;quot; or &amp;quot;contact.liquid&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Find the snippet that shows the success text ( in-between {%- if form.posted_successfully? -%}{%- endif -%} ),&lt;br /&gt;
Then add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Product Feed =&lt;br /&gt;
&lt;br /&gt;
The below App is free to use &amp;amp; should do most of the setup for you:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://apps.shopify.com/google&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing the App a Google account with access to the Merchant Centre needs to sign in.&amp;lt;br /&amp;gt;&lt;br /&gt;
DO NOT sign in using one of our Master email addresses, instead you can either:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Ask the client to do this, if they don&#039;t have access to Merchant Center we can try to add them.&lt;br /&gt;
 - Create a new email address that only has access to this Merchant Center &amp;amp; sign in with this instead.&lt;br /&gt;
&lt;br /&gt;
Then the below needs to be done, in this order otherwise it won&#039;t send the products through &amp;amp; you&#039;ll have to start from scratch:&amp;lt;br /&amp;gt;&lt;br /&gt;
 - Make sure the Store requirements are met &amp;amp; confirm these, if they aren&#039;t then send this back to the client so they can add whats necessary.&lt;br /&gt;
 - Under Product Feed, start the setup process.&lt;br /&gt;
 - Connect the Merchant Centre on the settings tab.&lt;br /&gt;
 - Specify the Target Market &amp;amp; set the Shipping settings to Manual (These will need to be added to Merchant Center by someone afterwards).&lt;br /&gt;
If this has been done correctly then the products should now be available within the Merchant Center account.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is for Reference, Do not use!&amp;lt;br /&amp;gt;&lt;br /&gt;
Alternatively, Shopify does provide you with the Product feed URL for your store.&amp;lt;br /&amp;gt;&lt;br /&gt;
To access this, you will need to append .atom to either all of your collections or to a specific collection URL.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/all.atom&amp;quot;&lt;br /&gt;
&amp;quot;yourstorename.com/collections/collectionname.atom&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Events for Analytics 4 =&lt;br /&gt;
&lt;br /&gt;
View Item: &amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to product-template.liquid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  window.dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
    event: &amp;quot;view_item&amp;quot;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
      currency: &amp;quot;GBP&amp;quot;,&lt;br /&gt;
      items: [&lt;br /&gt;
        {&lt;br /&gt;
          item_id: {{ product.id }},&lt;br /&gt;
          item_name: &amp;quot;{{ product.title }}&amp;quot;,&lt;br /&gt;
         {% if product.vendor %} item_brand: &amp;quot;{{ product.vendor }}&amp;quot;, {% endif %}&lt;br /&gt;
          price: {{ product.price | money_without_currency }},&lt;br /&gt;
         {% if product.type %} item_category: &amp;quot;{{ product.type }}&amp;quot;, {% endif %}&lt;br /&gt;
          google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
          id: &amp;quot;{{ product.id }}&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add To Cart:&amp;lt;br /&amp;gt;&lt;br /&gt;
The below listener can be added to GTM, this should send add_to_cart events to GTM for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings, data ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/cart/add&amp;quot;)) {          &lt;br /&gt;
          &lt;br /&gt;
          var items = [];&lt;br /&gt;
          items.push({&lt;br /&gt;
            item_id: data.product_id,&lt;br /&gt;
            item_name: data.title,&lt;br /&gt;
            item_category: data.product_type,&lt;br /&gt;
            price: ( data.price / 100 ),&lt;br /&gt;
            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
            id: data.product_id&lt;br /&gt;
          });&lt;br /&gt;
          &lt;br /&gt;
          if (typeof data.brand != &amp;quot;undefined&amp;quot;) items[0][&#039;item_brand&#039;] = data.brand;&lt;br /&gt;
          &lt;br /&gt;
          var dataLayer = window.dataLayer || [];&lt;br /&gt;
          dataLayer.push({&lt;br /&gt;
            event: &#039;add_to_cart&#039;,&lt;br /&gt;
            ecommerce: {&lt;br /&gt;
              currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
              items: items&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purchases:&amp;lt;br /&amp;gt;&lt;br /&gt;
Add this to the Settings &amp;gt; Checkout &amp;gt; Additional Scripts section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_time_accessed %}&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
	var items = [];&lt;br /&gt;
	var temp = {};&lt;br /&gt;
&lt;br /&gt;
	{% for line_item in line_items %}&lt;br /&gt;
		temp = {&lt;br /&gt;
		            item_id: {{ line_item.product.id }},&lt;br /&gt;
		            item_name: &amp;quot;{{ line_item.title }}&amp;quot;,&lt;br /&gt;
		            price: {{ line_item.final_line_price | money_without_currency }},&lt;br /&gt;
		            google_business_vertical: &amp;quot;retail&amp;quot;,&lt;br /&gt;
		            id: {{ line_item.product.id }},&lt;br /&gt;
                            quantity: {{ line_item.quantity }}&lt;br /&gt;
&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.type %} &lt;br /&gt;
			temp[&#039;item_category&#039;] = &amp;quot;{{ line_item.product.type }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		{% if line_item.product.vendor %} &lt;br /&gt;
			temp[&#039;item_brand&#039;] = &amp;quot;{{ line_item.product.vendor }}&amp;quot;;&lt;br /&gt;
		{% endif %}&lt;br /&gt;
&lt;br /&gt;
		items.push(temp);&lt;br /&gt;
		&lt;br /&gt;
	{% endfor %}&lt;br /&gt;
&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
  dataLayer.push({&lt;br /&gt;
  	event: &#039;purchase&#039;,&lt;br /&gt;
    ecommerce: {&lt;br /&gt;
    	affiliation: &#039;Online Store&#039;,&lt;br /&gt;
    	transaction_id: &#039;{{ order_number }}&#039;,&lt;br /&gt;
    	value: &#039;{{ total_price | money_without_currency }}&#039;,&lt;br /&gt;
    	tax: &#039;{{ tax_price | money_without_currency }}&#039;,&lt;br /&gt;
    	shipping: &#039;{{ shipping_price | money_without_currency}}&#039;,&lt;br /&gt;
    	currency: &amp;quot;GBP&amp;quot;, &lt;br /&gt;
      items: items&lt;br /&gt;
    }&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Event Tag &amp;amp; Variables can be setup with the below template:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Shopify-ga4-container-elements.json]]&lt;br /&gt;
&lt;br /&gt;
= Shopify Links =&lt;br /&gt;
Cheat sheet for Variables: &amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.shopify.co.uk/partners/shopify-cheat-sheet&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tawk&amp;diff=415</id>
		<title>Tawk</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tawk&amp;diff=415"/>
		<updated>2025-03-18T13:37:37Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking In Tag Manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
Tawk has an API for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
https://developer.tawk.to/jsapi/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function tawkDataLayerEvent( eventName ) {&lt;br /&gt;
        var dataLayer = window.dataLayer || [];&lt;br /&gt;
        dataLayer.push({&#039;event&#039; : &#039;tawk-&#039; + eventName});&lt;br /&gt;
    }&lt;br /&gt;
    window.Tawk_API = window.Tawk_API || {};&lt;br /&gt;
    window.Tawk_API.onLoad             = function(){ tawkDataLayerEvent(&#039;loaded&#039;); };&lt;br /&gt;
    window.Tawk_API.onStatusChange     = function(){ tawkDataLayerEvent(&#039;status-changed&#039;); };&lt;br /&gt;
    window.Tawk_API.onBeforeLoad       = function(){ tawkDataLayerEvent(&#039;before-load&#039;); };&lt;br /&gt;
    window.Tawk_API.onChatMaximized    = function(){ tawkDataLayerEvent(&#039;chat-maximised&#039;); };&lt;br /&gt;
    window.Tawk_API.onChatMinimized    = function(){ tawkDataLayerEvent(&#039;chat-minimised&#039;); };&lt;br /&gt;
    window.Tawk_API.onChatHidden       = function(){ tawkDataLayerEvent(&#039;chat-hidden&#039;); };&lt;br /&gt;
    window.Tawk_API.onChatStarted      = function(){ tawkDataLayerEvent(&#039;chat-started&#039;); };&lt;br /&gt;
    window.Tawk_API.onChatEnded        = function(){ tawkDataLayerEvent(&#039;chat-ended&#039;); };&lt;br /&gt;
    window.Tawk_API.onPrechatSubmit    = function(){ tawkDataLayerEvent(&#039;prechat-submitted&#039;); };&lt;br /&gt;
    window.Tawk_API.onOfflineSubmit    = function(){ tawkDataLayerEvent(&#039;offline-submitted&#039;); };&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates the following events to be fired:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tawk-loaded&lt;br /&gt;
tawk-status-changed&lt;br /&gt;
tawk-before-load&lt;br /&gt;
tawk-chat-maximised&lt;br /&gt;
tawk-chat-minimised&lt;br /&gt;
tawk-chat-hidden&lt;br /&gt;
tawk-chat-started&lt;br /&gt;
tawk-chat-ended&lt;br /&gt;
tawk-prechat-submitted&lt;br /&gt;
tawk-offline-submitted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=414</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=414"/>
		<updated>2025-03-13T10:27:22Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Chauffeur Booking System Plugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the Duracell Tomi Plugin:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use at the time of looking into this.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&amp;lt;br /&amp;gt;&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Calendly&amp;diff=413</id>
		<title>Calendly</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Calendly&amp;diff=413"/>
		<updated>2025-03-13T10:02:30Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: Created page with &amp;quot;== Tracking In Tag Manager ==  Tracking:&amp;lt;br /&amp;gt; https://www.analyticsmania.com/post/how-to-track-calendly-with-google-tag-manager-and-google-analytics-4/  &amp;lt;pre&amp;gt; &amp;lt;script&amp;gt; window.dataLayer = window.dataLayer ||[]; window.addEventListener(&amp;#039;message&amp;#039;,   function(e) {     if (e.data.event &amp;amp;&amp;amp; e.data.event.indexOf(&amp;#039;calendly&amp;#039;) === 0) {       window.dataLayer.push({         &amp;#039;event&amp;#039; : &amp;#039;calendly&amp;#039;,         &amp;#039;calendly_event&amp;#039; : e.data.event.split(&amp;#039;.&amp;#039;)[1]       });     }   } ); &amp;lt;/script&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
Tracking:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://www.analyticsmania.com/post/how-to-track-calendly-with-google-tag-manager-and-google-analytics-4/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
window.dataLayer = window.dataLayer ||[];&lt;br /&gt;
window.addEventListener(&#039;message&#039;,&lt;br /&gt;
  function(e) {&lt;br /&gt;
    if (e.data.event &amp;amp;&amp;amp; e.data.event.indexOf(&#039;calendly&#039;) === 0) {&lt;br /&gt;
      window.dataLayer.push({&lt;br /&gt;
        &#039;event&#039; : &#039;calendly&#039;,&lt;br /&gt;
        &#039;calendly_event&#039; : e.data.event.split(&#039;.&#039;)[1]&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=412</id>
		<title>Google Tag Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=412"/>
		<updated>2025-03-13T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= GTM =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://tagmanager.google.com/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Google Tag Manager is a site container used for storing and triggering scripts.&amp;lt;br /&amp;gt;&lt;br /&gt;
These then can be used for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Systems =&lt;br /&gt;
&lt;br /&gt;
Below are links to pages for different systems.&lt;br /&gt;
These pages will include the methods used for installing the Tag Manager and the Conversion Value tracking.&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Self-Host System !! On-site Builder Systems !! Chat Systems !! Other&lt;br /&gt;
|-&lt;br /&gt;
| [[CS-Cart]] || [[Bigcommerce]] || [[CollectChat]] || [[Calendly]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Joomla]] || [[Ecwid]] || [[HubSpot Chat]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 1.x]] || [[EKMPowershop]] || [[Jivo]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 2.x]] || [[MyshopBlocks]] || [[LiveChat]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[OpenCart]] || [[Roman Cart]] || [[PureChat]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Prestashop]] || [[Shopify]] || [[Tawk]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tag Manager Installation (Wordpress)|Wordpress]] || [[Squarespace]] || [[Tidio]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[X-Cart]] || [[Trill]] || [[ZenDesk]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Zen Cart]] || [[Wix]] || [[Zoho]] || &lt;br /&gt;
|-&lt;br /&gt;
||| [[Yell]] || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Useful Info =&lt;br /&gt;
&lt;br /&gt;
== Generic jQuery Form Listener ==&lt;br /&gt;
&lt;br /&gt;
If there is no instructions in the wiki for a particular system and/or plugin and the form uses Ajax to submit,&lt;br /&gt;
It may be worth trying this generic form listener.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
depending on what the jQuery is called when initialized you may need to change &amp;quot;jQuery&amp;quot; to &amp;quot;$&amp;quot; in the code below.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
create a custom HTML tag and change the index URL to what the URL is submitting to in the Ajax form.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/form/process/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
note: the form must be using the actual jQuery&#039;s Ajax method to perform the request for this to work&lt;br /&gt;
&lt;br /&gt;
== Unique Page Views ==&lt;br /&gt;
&lt;br /&gt;
You can track unique page views by storing a value in the sessionStorage variable.&lt;br /&gt;
This can be useful for tracking forms where only a thank you page is available track.&lt;br /&gt;
&lt;br /&gt;
Create a tag that only fires on the page you want to track&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var gtm_fs_count = 1;&lt;br /&gt;
  var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g, &#039;F_SLASH&#039;);&lt;br /&gt;
  if (sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     gtm_fs_count = gtm_fs_count+1;&lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count);&lt;br /&gt;
    &lt;br /&gt;
  } else if(!sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count) ;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a custom JS variable to retrieve the value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function() {&lt;br /&gt;
 var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g,&amp;quot;F_SLASH&amp;quot;);&lt;br /&gt;
 return parseInt(window.sessionStorage[page_path]); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then update the trigger to the variable is less than 2 as well as its existing conditions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cookie Consent Banner &amp;amp; Consent Mode V2 ==&lt;br /&gt;
&lt;br /&gt;
For clients that don&#039;t have this setup &amp;amp; functioning already, its possible to setup a consent mode friendly cookie banner using the below JS:&lt;br /&gt;
Within the .zip, the file is /build/cookieconsent.js&lt;br /&gt;
[[Media:Cookieconsent-master.zip|Cookieconsent-master.zip]]&lt;br /&gt;
&lt;br /&gt;
This file will need to be hosted somewhere that is accessible for the client site.&lt;br /&gt;
Once this has been done the below script will need to be added to the site, before GTM is loaded.&lt;br /&gt;
Make sure to swap cookieconsent.js with the location of the js file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;cookieconsent.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Define dataLayer and the gtag function.&lt;br /&gt;
    window.dataLayer = window.dataLayer || [];&lt;br /&gt;
    function gtag() { dataLayer.push(arguments); }&lt;br /&gt;
    window.CookieConsent.init({&lt;br /&gt;
        categories: {&lt;br /&gt;
            // Unique name.&lt;br /&gt;
            necessary: {&lt;br /&gt;
                needed: true,&lt;br /&gt;
                wanted: true,&lt;br /&gt;
                checked: true,&lt;br /&gt;
                // Language settings for categories.&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Strictly Necessary Cookies&#039;,&lt;br /&gt;
                            description: &#039;Cookies Required for the site to function as intended.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            analytics: {&lt;br /&gt;
                needed: false,&lt;br /&gt;
                wanted: false,&lt;br /&gt;
                checked: false,&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Analytics&#039;,&lt;br /&gt;
                            description: &#039;Cookies used by Google &amp;amp; other 3rd party analytics services.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        consentModeControls: {&lt;br /&gt;
            ad_storage: &#039;analytics&#039;,&lt;br /&gt;
            ad_user_data: &#039;analytics&#039;,&lt;br /&gt;
            ad_personalization: &#039;analytics&#039;,&lt;br /&gt;
            analytics_storage: &#039;analytics&#039;&lt;br /&gt;
        },&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    if (localStorage.getItem(&#039;consentMode&#039;) === null) {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
            &#039;ad_storage&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_user_data&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_personalization&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;analytics_storage&#039;: &#039;denied&#039;&lt;br /&gt;
        });&lt;br /&gt;
    } else {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, JSON.parse(localStorage.getItem(&#039;consentMode&#039;)));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional, but to make it look slightly better you could reduce the opacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    #cconsent-bar {&lt;br /&gt;
      opacity: 0.9;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Squarespace&amp;diff=411</id>
		<title>Squarespace</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Squarespace&amp;diff=411"/>
		<updated>2025-01-23T10:02:04Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Contact Form */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Install Tag Manager =&lt;br /&gt;
&lt;br /&gt;
A business Account or higher is required to install tag manager.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Settings -&amp;gt; Advanced -&amp;gt; Code Injection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enter the GTM to the Head &amp;amp; Footer&lt;br /&gt;
&lt;br /&gt;
= Contact Form =&lt;br /&gt;
&lt;br /&gt;
On the contact form, click:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Edit -&amp;gt; Advanced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
within the Post-Submit HTML field enter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sales =&lt;br /&gt;
&lt;br /&gt;
Settings -&amp;gt; Advanced -&amp;gt; Code Injection &amp;lt;/br&amp;gt;&lt;br /&gt;
Scroll down to Order Confirmation Page &amp;amp; add the below:&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
window.dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;order_id&#039; : &#039;{orderId}&#039;});&lt;br /&gt;
dataLayer.push({&#039;order_value&#039; : &#039;{orderGrandTotal}&#039;});&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;order-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=ZenDesk&amp;diff=410</id>
		<title>ZenDesk</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=ZenDesk&amp;diff=410"/>
		<updated>2025-01-23T10:00:08Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking In Tag Manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
ZenDesk has an API for tracking.&lt;br /&gt;
&lt;br /&gt;
https://developer.zendesk.com/embeddables/docs/widget/chat&lt;br /&gt;
&lt;br /&gt;
To use this, create a custom HTML tag In tag manager and trigger it on any pages the ZenDesk chat runs on.&lt;br /&gt;
&lt;br /&gt;
Add this script to the custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function zendeskDataLayerEvent( eventName ) {&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
	dataLayer.push({&#039;event&#039; : &#039;zendesk-&#039; + eventName});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;chat:connected&#039;, function(){ zendeskDataLayerEvent(&#039;connected&#039;); });&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;open&#039;, function(){ zendeskDataLayerEvent(&#039;on-show&#039;); });&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;close&#039;, function(){ zendeskDataLayerEvent(&#039;on-hide&#039;); });&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;chat:start&#039;, function(){ zendeskDataLayerEvent(&#039;chat-started&#039;); });&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;chat:unreadMessages&#039;, function(number){ zendeskDataLayerEvent(&#039;unread-msg&#039;); });&lt;br /&gt;
zE(&#039;webWidget:on&#039;, &#039;chat:end&#039;, function(){ zendeskDataLayerEvent(&#039;chat-ended&#039;); });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up the events in the datalayer to be used in triggers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zendesk-connected&lt;br /&gt;
zendesk-on-show&lt;br /&gt;
zendesk-on-hide&lt;br /&gt;
zendesk-chat-started&lt;br /&gt;
zendesk-unread-msg&lt;br /&gt;
zendesk-chat-ended&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note there is no way to track offline form submits (when no one is there to chat)&lt;br /&gt;
&lt;br /&gt;
=== Legacy ===&lt;br /&gt;
&lt;br /&gt;
Legacy ZenDesk has an API for tracking.&lt;br /&gt;
&lt;br /&gt;
https://api.zopim.com/files/meshim/widget/controllers/LiveChatAPI-js.html&lt;br /&gt;
&lt;br /&gt;
To use this, create a custom HTML tag In tag manager and trigger it on any pages the ZenDesk chat runs on.&lt;br /&gt;
&lt;br /&gt;
Add this script to the custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function zendeskDataLayerEvent( eventName ) {&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
	dataLayer.push({&#039;event&#039; : &#039;zendesk-&#039; + eventName});&lt;br /&gt;
	console.log( &#039;Datalayer: zendesk-&#039; + eventName );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var waitForZopim = setInterval(function () {&lt;br /&gt;
&lt;br /&gt;
	if (window.$zopim === undefined || window.$zopim.livechat === undefined) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$zopim(function() {&lt;br /&gt;
		$zopim.livechat.setOnConnected( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;connected&#039;);&lt;br /&gt;
		});&lt;br /&gt;
		$zopim.livechat.window.onShow( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;on-show&#039;);&lt;br /&gt;
		});&lt;br /&gt;
		$zopim.livechat.window.onHide( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;on-hide&#039;);&lt;br /&gt;
		});&lt;br /&gt;
		$zopim.livechat.setOnChatStart( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;chat-started&#039;);&lt;br /&gt;
		});&lt;br /&gt;
		$zopim.livechat.setOnUnreadMsgs( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;unread-msg&#039;);&lt;br /&gt;
		});&lt;br /&gt;
		$zopim.livechat.setOnChatEnd( function() {&lt;br /&gt;
			zendeskDataLayerEvent(&#039;chat-ended&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	clearInterval( waitForZopim );&lt;br /&gt;
&lt;br /&gt;
}, 100);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up the events in the datalayer to be used in triggers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zendesk-connected&lt;br /&gt;
zendesk-on-show&lt;br /&gt;
zendesk-on-hide&lt;br /&gt;
zendesk-chat-started&lt;br /&gt;
zendesk-unread-msg&lt;br /&gt;
zendesk-chat-ended&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note there is no way to track offline form submits (when no one is there to chat)&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tawk&amp;diff=409</id>
		<title>Tawk</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tawk&amp;diff=409"/>
		<updated>2025-01-21T14:49:28Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
Tawk has an API for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
https://developer.tawk.to/jsapi/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
    function tawkDataLayerEvent( eventName ) {&lt;br /&gt;
        var dataLayer = window.dataLayer || [];&lt;br /&gt;
        dataLayer.push({&#039;event&#039; : &#039;tawk-&#039; + eventName});&lt;br /&gt;
    }&lt;br /&gt;
    window.Tawk_API = window.Tawk_API || {};&lt;br /&gt;
    if( window.Tawk_API ) {&lt;br /&gt;
        window.Tawk_API.onLoad             = function(){ tawkDataLayerEvent(&#039;loaded&#039;); };&lt;br /&gt;
        window.Tawk_API.onStatusChange     = function(){ tawkDataLayerEvent(&#039;status-changed&#039;); };&lt;br /&gt;
        window.Tawk_API.onBeforeLoad       = function(){ tawkDataLayerEvent(&#039;before-load&#039;); };&lt;br /&gt;
        window.Tawk_API.onChatMaximized    = function(){ tawkDataLayerEvent(&#039;chat-maximised&#039;); };&lt;br /&gt;
        window.Tawk_API.onChatMinimized    = function(){ tawkDataLayerEvent(&#039;chat-minimised&#039;); };&lt;br /&gt;
        window.Tawk_API.onChatHidden       = function(){ tawkDataLayerEvent(&#039;chat-hidden&#039;); };&lt;br /&gt;
        window.Tawk_API.onChatStarted      = function(){ tawkDataLayerEvent(&#039;chat-started&#039;); };&lt;br /&gt;
        window.Tawk_API.onChatEnded        = function(){ tawkDataLayerEvent(&#039;chat-ended&#039;); };&lt;br /&gt;
        window.Tawk_API.onPrechatSubmit    = function(){ tawkDataLayerEvent(&#039;prechat-submitted&#039;); };&lt;br /&gt;
        window.Tawk_API.onOfflineSubmit    = function(){ tawkDataLayerEvent(&#039;offline-submitted&#039;); };&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates the following events to be fired:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tawk-loaded&lt;br /&gt;
tawk-status-changed&lt;br /&gt;
tawk-before-load&lt;br /&gt;
tawk-chat-maximised&lt;br /&gt;
tawk-chat-minimised&lt;br /&gt;
tawk-chat-hidden&lt;br /&gt;
tawk-chat-started&lt;br /&gt;
tawk-chat-ended&lt;br /&gt;
tawk-prechat-submitted&lt;br /&gt;
tawk-offline-submitted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Roman_Cart&amp;diff=408</id>
		<title>Roman Cart</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Roman_Cart&amp;diff=408"/>
		<updated>2024-12-09T11:44:50Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Installing GTM / Value Tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installing GTM / Value Tracking =&lt;br /&gt;
&lt;br /&gt;
Once signed into Roman Cart, go to &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Marketing &amp;gt; External Sales Tracking &amp;gt; Sales Tracking Scripts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the below code here, swapping the GTM ID for the relevant one, make sure not to exceed the character limit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- Google Tag Manager --&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({&#039;gtm.start&#039;:&lt;br /&gt;
new Date().getTime(),event:&#039;gtm.js&#039;});var f=d.getElementsByTagName(s)[0],&lt;br /&gt;
j=d.createElement(s),dl=l!=&#039;dataLayer&#039;?&#039;&amp;amp;l=&#039;+l:&#039;&#039;;j.async=true;j.src=&lt;br /&gt;
&#039;https://www.googletagmanager.com/gtm.js?id=&#039;+i+dl;f.parentNode.insertBefore(j,f);&lt;br /&gt;
})(window,document,&#039;script&#039;,&#039;dataLayer&#039;,&#039;GTM-XXXXXX&#039;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- End Google Tag Manager --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Google Tag Manager (noscript) --&amp;gt;&lt;br /&gt;
&amp;lt;noscript&amp;gt;&amp;lt;iframe src=&amp;quot;https://www.googletagmanager.com/ns.html?id=GTM-XXXXXX&amp;quot;&lt;br /&gt;
height=&amp;quot;0&amp;quot; width=&amp;quot;0&amp;quot; style=&amp;quot;display:none;visibility:hidden&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/noscript&amp;gt;&lt;br /&gt;
&amp;lt;!-- End Google Tag Manager (noscript) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;order_value&#039; : &#039;&amp;lt;totalpricenocurr&amp;gt;&#039;, &#039;order_id&#039; : &#039;&amp;lt;orderid&amp;gt;&#039;, &#039;event&#039; : &#039;order-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=407</id>
		<title>LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=407"/>
		<updated>2024-11-28T16:40:52Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Let&#039;s Encrypt on Ubuntu server ==&lt;br /&gt;
&lt;br /&gt;
First update the server&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Apache ===&lt;br /&gt;
&lt;br /&gt;
Then run these command to install and config certbot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install certbot python3-certbot-apache&lt;br /&gt;
sudo apache2ctl configtest&lt;br /&gt;
sudo systemctl reload apache2&lt;br /&gt;
sudo ufw allow &#039;Apache Full&#039;&lt;br /&gt;
&lt;br /&gt;
sudo certbot --apache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check auto renewal status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl status certbot.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nginx ===&lt;br /&gt;
&lt;br /&gt;
Then run these command to install and config certbot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install certbot python3-certbot-nginx&lt;br /&gt;
sudo systemctl reload nginx&lt;br /&gt;
&lt;br /&gt;
sudo certbot --nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check auto renewal status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl status certbot.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=406</id>
		<title>LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=406"/>
		<updated>2024-11-28T16:15:10Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Let&#039;s Encrypt on Ubuntu server with apache ==&lt;br /&gt;
&lt;br /&gt;
First update the server&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run these command to install and config certbot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install certbot python3-certbot-apache&lt;br /&gt;
sudo apache2ctl configtest&lt;br /&gt;
sudo systemctl reload apache2&lt;br /&gt;
sudo ufw allow &#039;Apache Full&#039;&lt;br /&gt;
&lt;br /&gt;
sudo certbot --apache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check auto renewal status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl status certbot.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Let&#039;s Encrypt on Ubuntu server with nginx ==&lt;br /&gt;
&lt;br /&gt;
First update the server&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run these command to install and config certbot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install certbot python3-certbot-nginx&lt;br /&gt;
sudo systemctl reload nginx&lt;br /&gt;
&lt;br /&gt;
sudo certbot --nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check auto renewal status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl status certbot.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Call_Tracking&amp;diff=402</id>
		<title>Google Call Tracking</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Call_Tracking&amp;diff=402"/>
		<updated>2024-09-16T09:52:52Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: Created page with &amp;quot;= Debug Mode = At the end of the URL add either:  &amp;lt;pre&amp;gt; #google-wcc-debug #google-wcc-force &amp;lt;/pre&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Debug Mode =&lt;br /&gt;
At the end of the URL add either:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#google-wcc-debug&lt;br /&gt;
#google-wcc-force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=401</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=401"/>
		<updated>2024-09-16T09:51:41Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Main Subjects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Login to make changes ==&lt;br /&gt;
You can login using firstname.surname as the username.&amp;lt;br /&amp;gt;&lt;br /&gt;
The password is the same as the tools login.&lt;br /&gt;
&lt;br /&gt;
== Main Subjects ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager Installation: [[Google Tag Manager]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Google Call Tracking: [[Google Call Tracking]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Getting Feeds: [[Feeds]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s Encrypt: [[LetsEncrypt]]&lt;br /&gt;
&lt;br /&gt;
SuiteCRM 8.x: [[SuiteCRM_8.x]]&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Prestashop&amp;diff=400</id>
		<title>Prestashop</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Prestashop&amp;diff=400"/>
		<updated>2024-09-10T09:07:14Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Check Module Install Permissions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Tag Manager can be installed in the theme&#039;s header &amp;amp;/or head template file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\themes\&amp;lt;&amp;lt;theme&amp;gt;&amp;gt;\header.tpl&lt;br /&gt;
\themes\&amp;lt;&amp;lt;theme&amp;gt;&amp;gt;\head.tpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This needs to be wrapped around with {literal}{/literal} tags&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking ==&lt;br /&gt;
&lt;br /&gt;
This can be done but using a plugin that hooks onto the order page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://git.loki.co.uk/attachments/9bea9480-d6c0-4de8-8f56-e61998531794&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Prestashop 1.7+ the plugin has been modified to use the new hooks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://git.loki.co.uk/attachments/b7d808fd-9b94-4656-a807-096984300c2b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the files and make sure it is in the modules folder.&lt;br /&gt;
the folder structure should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\modules\datalayer\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the module will need to be installed (this can be done by searching in the &amp;quot;manage modules&amp;quot; tab).&lt;br /&gt;
If the module does not show up, you may not have permissions even if you are set up as admin &amp;amp; can see the modules.&lt;br /&gt;
&lt;br /&gt;
=== Check Module Install Permissions ===&lt;br /&gt;
&lt;br /&gt;
To check if the account has the install permissions, use adminer and access the database.&amp;lt;br /&amp;gt;&lt;br /&gt;
This will require some method to access the files e.g. FTP&lt;br /&gt;
&lt;br /&gt;
Go to the employee table in the database and get the &amp;quot;id_profile&amp;quot; field from the relevant employee row.&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to the tab table and get the &amp;quot;id_tab&amp;quot; field from the row that has a module called &amp;quot;AdminModules&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
Then go to the access tab and match up the &amp;quot;id_profile&amp;quot; &amp;amp; &amp;quot;id_tab&amp;quot; with what was retrieved before to see the file permissions.&amp;lt;br /&amp;gt;&lt;br /&gt;
Change or add to &amp;quot;1&amp;quot; to enable installation.&lt;br /&gt;
&lt;br /&gt;
= Clear Cache =&lt;br /&gt;
&lt;br /&gt;
== Admin Panel ==&lt;br /&gt;
&lt;br /&gt;
To Clear cache via admin go to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Advanced Parameters &amp;gt; performance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then Click the &amp;quot;clear cache&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
== FTP ==&lt;br /&gt;
&lt;br /&gt;
To clear the cache via FTP go to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\cache\smarty\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then inside both &amp;quot;cache&amp;quot; &amp;amp; &amp;quot;compile&amp;quot; folders, delete all folders except the index.php and the flush file.&lt;br /&gt;
&lt;br /&gt;
refresh page and cache should rebuild&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=OpenCart&amp;diff=399</id>
		<title>OpenCart</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=OpenCart&amp;diff=399"/>
		<updated>2024-09-05T08:50:03Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Feeds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Install Tag Manager.&lt;br /&gt;
*Note, the OCmod &amp;amp; VQmod scripts below insert the Tag Manager.&lt;br /&gt;
&lt;br /&gt;
Main Template file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/catalog/view/theme/&amp;lt;&amp;lt;Theme Folder&amp;gt;&amp;gt;/template/common/header.tpl &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion URLS ==&lt;br /&gt;
Contact Thank-you URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=information/contact/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sale Thank-you URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=checkout/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Account Creation URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=account/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Value ==&lt;br /&gt;
&lt;br /&gt;
The easiest and most reliable way to install the Conversion value tracking is via extensions that inject the code directly into core files.&amp;lt;br /&amp;gt;&lt;br /&gt;
These are upgrade safe! (The worst that can happen is that a reference can change and the code is not injected)&amp;lt;br /&amp;gt;&lt;br /&gt;
Before using these, it is best to check that the references are the same.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Change the GTM ID&#039;s in the scripts!&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenCart 2.x uses .tpl files&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenCart 3.x uses .twig files&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VQmod ===&lt;br /&gt;
An OpenCart extension called VQmod is required to insert it into the code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vqmod/xml/get_total_to_success.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:Get total to success.xml|Get_total_to_success.xml]]&lt;br /&gt;
&lt;br /&gt;
=== OCmod ===&lt;br /&gt;
&lt;br /&gt;
An OpenCart extension called OCmod is required to insert it into the code.&lt;br /&gt;
&lt;br /&gt;
Opencart v3.0 Onwards:&lt;br /&gt;
[[Media:Gtm.ocmod.zip|Gtm.ocmod.zip]]&lt;br /&gt;
&lt;br /&gt;
Opencart v2.0:&lt;br /&gt;
[[Media:Gtm-2x.ocmod.zip|Gtm-2x.ocmod.zip]]&lt;br /&gt;
&lt;br /&gt;
= Feeds =&lt;br /&gt;
&lt;br /&gt;
The Google Base extension will need to be installed and activated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://docs.opencart.com/en-gb/extension/feed/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The URL for the generated Feed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/index.php?route=feed/google_base&lt;br /&gt;
/googlebase.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=398</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=398"/>
		<updated>2024-08-07T10:07:01Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reset permissions&lt;br /&gt;
&lt;br /&gt;
= Reset Permissions =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find . -type d -not -perm 2755 -exec chmod 2755 {} \;&lt;br /&gt;
find . -type f -not -perm 0644 -exec chmod 0644 {} \;&lt;br /&gt;
find . ! -user www-data -exec chown www-data:www-data {} \;&lt;br /&gt;
chmod +x bin/console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= development =&lt;br /&gt;
https://docs.suitecrm.com/8.x/developer/installation-guide/front-end-installation-guide/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install npm&lt;br /&gt;
sudo npm install --global yarn&lt;br /&gt;
sudo npm install @angular/cli@16.2.13&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yarn run build:common&lt;br /&gt;
yarn run build:core&lt;br /&gt;
yarn run build:shell&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Jivo&amp;diff=397</id>
		<title>Jivo</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Jivo&amp;diff=397"/>
		<updated>2024-08-01T14:31:55Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tracking In Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
Jivohas an API for tracking.&lt;br /&gt;
&lt;br /&gt;
https://www.jivochat.co.uk/docs/widget/&lt;br /&gt;
&lt;br /&gt;
To use this, create a custom HTML tag In tag manager and trigger it on any pages the Jivochat runs on.&lt;br /&gt;
&lt;br /&gt;
Add this script to the custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function jivoDataLayerEvent( eventName ) {&lt;br /&gt;
	var dataLayer = window.dataLayer || [];&lt;br /&gt;
	dataLayer.push({&#039;event&#039; : &#039;jivo-&#039; + eventName});&lt;br /&gt;
}&lt;br /&gt;
function jivo_onOpen() { jivoDataLayerEvent( &#039;chat-opened&#039; ); }&lt;br /&gt;
function jivo_onMessageSent() { jivoDataLayerEvent( &#039;message-sent&#039; ); }&lt;br /&gt;
function jivo_onIntroduction() { jivoDataLayerEvent( &#039;contact-sent&#039; ); }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=396</id>
		<title>Google Tag Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=396"/>
		<updated>2024-08-01T08:34:19Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= GTM =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://tagmanager.google.com/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Google Tag Manager is a site container used for storing and triggering scripts.&amp;lt;br /&amp;gt;&lt;br /&gt;
These then can be used for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Systems =&lt;br /&gt;
&lt;br /&gt;
Below are links to pages for different systems.&lt;br /&gt;
These pages will include the methods used for installing the Tag Manager and the Conversion Value tracking.&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Self-Host System !! On-site Builder Systems !! Chat Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[CS-Cart]] || [[Bigcommerce]] || [[CollectChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Joomla]] || [[Ecwid]] || [[HubSpot Chat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 1.x]] || [[EKMPowershop]] || [[Jivo]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 2.x]] || [[MyshopBlocks]] || [[LiveChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[OpenCart]] || [[Roman Cart]] || [[PureChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Prestashop]] || [[Shopify]] || [[Tawk]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Tag Manager Installation (Wordpress)|Wordpress]] || [[Squarespace]] || [[Tidio]]&lt;br /&gt;
|-&lt;br /&gt;
| [[X-Cart]] || [[Trill]] || [[ZenDesk]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Zen Cart]] || [[Wix]] || [[Zoho]]&lt;br /&gt;
|-&lt;br /&gt;
||| [[Yell]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Useful Info =&lt;br /&gt;
&lt;br /&gt;
== Generic jQuery Form Listener ==&lt;br /&gt;
&lt;br /&gt;
If there is no instructions in the wiki for a particular system and/or plugin and the form uses Ajax to submit,&lt;br /&gt;
It may be worth trying this generic form listener.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
depending on what the jQuery is called when initialized you may need to change &amp;quot;jQuery&amp;quot; to &amp;quot;$&amp;quot; in the code below.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
create a custom HTML tag and change the index URL to what the URL is submitting to in the Ajax form.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/form/process/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
note: the form must be using the actual jQuery&#039;s Ajax method to perform the request for this to work&lt;br /&gt;
&lt;br /&gt;
== Unique Page Views ==&lt;br /&gt;
&lt;br /&gt;
You can track unique page views by storing a value in the sessionStorage variable.&lt;br /&gt;
This can be useful for tracking forms where only a thank you page is available track.&lt;br /&gt;
&lt;br /&gt;
Create a tag that only fires on the page you want to track&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var gtm_fs_count = 1;&lt;br /&gt;
  var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g, &#039;F_SLASH&#039;);&lt;br /&gt;
  if (sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     gtm_fs_count = gtm_fs_count+1;&lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count);&lt;br /&gt;
    &lt;br /&gt;
  } else if(!sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count) ;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a custom JS variable to retrieve the value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function() {&lt;br /&gt;
 var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g,&amp;quot;F_SLASH&amp;quot;);&lt;br /&gt;
 return parseInt(window.sessionStorage[page_path]); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then update the trigger to the variable is less than 2 as well as its existing conditions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cookie Consent Banner &amp;amp; Consent Mode V2 ==&lt;br /&gt;
&lt;br /&gt;
For clients that don&#039;t have this setup &amp;amp; functioning already, its possible to setup a consent mode friendly cookie banner using the below JS:&lt;br /&gt;
Within the .zip, the file is /build/cookieconsent.js&lt;br /&gt;
[[Media:Cookieconsent-master.zip|Cookieconsent-master.zip]]&lt;br /&gt;
&lt;br /&gt;
This file will need to be hosted somewhere that is accessible for the client site.&lt;br /&gt;
Once this has been done the below script will need to be added to the site, before GTM is loaded.&lt;br /&gt;
Make sure to swap cookieconsent.js with the location of the js file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;cookieconsent.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Define dataLayer and the gtag function.&lt;br /&gt;
    window.dataLayer = window.dataLayer || [];&lt;br /&gt;
    function gtag() { dataLayer.push(arguments); }&lt;br /&gt;
    window.CookieConsent.init({&lt;br /&gt;
        categories: {&lt;br /&gt;
            // Unique name.&lt;br /&gt;
            necessary: {&lt;br /&gt;
                needed: true,&lt;br /&gt;
                wanted: true,&lt;br /&gt;
                checked: true,&lt;br /&gt;
                // Language settings for categories.&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Strictly Necessary Cookies&#039;,&lt;br /&gt;
                            description: &#039;Cookies Required for the site to function as intended.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            analytics: {&lt;br /&gt;
                needed: false,&lt;br /&gt;
                wanted: false,&lt;br /&gt;
                checked: false,&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Analytics&#039;,&lt;br /&gt;
                            description: &#039;Cookies used by Google &amp;amp; other 3rd party analytics services.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        consentModeControls: {&lt;br /&gt;
            ad_storage: &#039;analytics&#039;,&lt;br /&gt;
            ad_user_data: &#039;analytics&#039;,&lt;br /&gt;
            ad_personalization: &#039;analytics&#039;,&lt;br /&gt;
            analytics_storage: &#039;analytics&#039;&lt;br /&gt;
        },&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    if (localStorage.getItem(&#039;consentMode&#039;) === null) {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
            &#039;ad_storage&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_user_data&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_personalization&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;analytics_storage&#039;: &#039;denied&#039;&lt;br /&gt;
        });&lt;br /&gt;
    } else {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, JSON.parse(localStorage.getItem(&#039;consentMode&#039;)));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional, but to make it look slightly better you could reduce the opacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    #cconsent-bar {&lt;br /&gt;
      opacity: 0.9;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=393</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=393"/>
		<updated>2024-06-28T09:07:46Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking Other Wordpress Contact Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the Duracell Tomi Plugin:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Ninja Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready( function() {&lt;br /&gt;
	jQuery(document).on(&#039;nfFormSubmitResponse&#039;, function(event, response, id) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&lt;br /&gt;
			&#039;event&#039;: &#039;contact-form-submitted&#039;,&lt;br /&gt;
			&#039;NFform_id&#039;: response.id&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=392</id>
		<title>Tag Manager Installation (Wordpress)</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Tag_Manager_Installation_(Wordpress)&amp;diff=392"/>
		<updated>2024-06-28T09:05:43Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tracking Other Wordpress Contact Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To install on google tag manager it is advised to use the Duracell Tomi Plugin:&lt;br /&gt;
[[Google Tag Manager for WordPress (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Contact Plugins =&lt;br /&gt;
&lt;br /&gt;
== Caldera Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( function() {&lt;br /&gt;
	jQuery( document ).on( &#039;cf.form.submit&#039;, function (event, data ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is not set to AJAX submission.&lt;br /&gt;
&lt;br /&gt;
== Contact Form 7 ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery( function() {&lt;br /&gt;
		jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7mailsent&#039;, function(e) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			var cF7formid = &#039;(not set)&#039;;&lt;br /&gt;
			var cF7formName = &#039;(not set)&#039;;&lt;br /&gt;
			if ( e &amp;amp;&amp;amp; e.target &amp;amp;&amp;amp; e.target.id ) {&lt;br /&gt;
				cF7formName = e.target.id;&lt;br /&gt;
			}&lt;br /&gt;
			if( cF7formName ) {&lt;br /&gt;
				var nameRegex = cF7formName.match(/-f([0-9]+)-/) || [&#039;&#039;];&lt;br /&gt;
				if( nameRegex &amp;amp;&amp;amp; nameRegex[1] ) {&lt;br /&gt;
					cF7formid = nameRegex[1];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			dataLayer.push({&lt;br /&gt;
				&#039;contact-form-id&#039;: cF7formid,&lt;br /&gt;
				&#039;contact-form-name&#039;: cF7formName,&lt;br /&gt;
				&#039;event&#039;: &#039;contact-form-submitted&#039;&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: CF7 developers love changing their hook names, if this doesn&#039;t work try the below instead:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(&#039;.wpcf7&#039;).on(&#039;wpcf7:mailsent&#039;, function(e) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Plus ==&lt;br /&gt;
&lt;br /&gt;
For the poppup form, create tag as Custom HTML and use the ajaxSuccess hook below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if( ~settings.url.indexOf(&amp;quot;/wp-admin/admin-ajax.php&amp;quot;) &amp;amp;&amp;amp; ~settings.data.indexOf(&amp;quot;action=cp_add_subscriber&amp;quot;) ) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;cp-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Divi Form Builder ==&lt;br /&gt;
Create tag as Custom HTML and use the ajaxSuccess hook below, the location will need to be changed to the contact page it is submitting the Ajax request to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
It is also possible to use the field names that are being submitted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.data.indexOf(&amp;quot;et_pb_contact_firstname&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Elementor Form Builder ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;submit_success&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FormCraft ==&lt;br /&gt;
&lt;br /&gt;
This plugin does not strip or encode script tags, so can be done in the back-end&lt;br /&gt;
&lt;br /&gt;
In form options go to options -&amp;gt; Custom Text -&amp;gt; Top Box&lt;br /&gt;
&lt;br /&gt;
In newer versions, the form cannot be saved with the script tag added,&lt;br /&gt;
another method will need to be researched.&lt;br /&gt;
&lt;br /&gt;
== Formidable ==&lt;br /&gt;
Just can copy and paste the dataLayer event script directly to success message in back-end.&lt;br /&gt;
&lt;br /&gt;
== Gravity Form ==&lt;br /&gt;
&lt;br /&gt;
Create tag as custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	jQuery(document).ready(function(){&lt;br /&gt;
		jQuery(document).on(&#039;gform_confirmation_loaded&#039;, function(event, form_id) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;gform_id&#039; : form_id, &#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, AJAX is required to be enabled on the form.&lt;br /&gt;
This can be enabled in the short-code[https://codex.wordpress.org/Shortcode_API] when the form is called on the wordpress page:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[gravityform id=&amp;quot;1&amp;quot; ajax=&amp;quot;true&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*note, the JS bind will not fire if the form is set to redirect after success.&lt;br /&gt;
&lt;br /&gt;
== Pojo Forms ==&lt;br /&gt;
&lt;br /&gt;
Create tag as Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery( document ).ready(function( $ ){&lt;br /&gt;
	$( document ).on(&#039;pojo_forms_form_submitted&#039;, function( event, response ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siteorigin form ==&lt;br /&gt;
this strips out script tags so will need to add custom JS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
  var success = document.getElementsByClassName(&amp;quot;sow-contact-form-success&amp;quot;);&lt;br /&gt;
  return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WP Forms ==&lt;br /&gt;
Using a slightly altered version of the JQuery form listener should work for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).on(&#039;wpformsAjaxSubmitSuccess&#039;, (function( event, json ) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;form-submitted&#039;});&lt;br /&gt;
	}));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively:&lt;br /&gt;
The Event can be added directly to the form confirmation message&lt;br /&gt;
Edit the form &amp;amp; go to Settings &amp;gt; Confirmations&lt;br /&gt;
Switch to Text view then add the event code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Or if using GTM4WP&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a datalayer variable in GTM with:&amp;lt;br /&amp;gt;&lt;br /&gt;
eventModel.form_id for Form ID&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a custom event Trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event: form_submit&lt;br /&gt;
Some Custom Events:&lt;br /&gt;
Form ID contains wpforms-form-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Newsletter Plugins =&lt;br /&gt;
&lt;br /&gt;
== Mailchimp Forms (mc4wp) ==&lt;br /&gt;
&lt;br /&gt;
if is not AJAX and stays on page when the form submits, add a JS variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function () {&lt;br /&gt;
	var success = document.getElementsByClassName(&amp;quot;mc4wp-success&amp;quot;);&lt;br /&gt;
	return (typeof success[0] != &amp;quot;undefined&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if not, custom HTML will need to be added as a listener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	mc4wp.forms.on(&#039;submitted&#039;, function() {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;newsletter-form-submitted&#039;});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pop-up Builder - Mailchimp ==&lt;br /&gt;
&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof SgpbMailchimp != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	var originalmcsuccess = SgpbMailchimp.prototype.sgpbMailchimpSuccess;&lt;br /&gt;
	SgpbMailchimp.prototype.sgpbMailchimpSuccess = function(data) {&lt;br /&gt;
		originalmcsuccess.call(this, data);&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;mailchimp-form-submitted&#039;});&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avia Form Builder ==&lt;br /&gt;
Add Custom HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function($) {&lt;br /&gt;
    $(&#039;body&#039;).on(&#039;av_resize_finished&#039;, function() {&lt;br /&gt;
	if(!$(&#039;#ajaxresponse_1&#039;).hasClass(&#039;hidden&#039;)) {&lt;br /&gt;
		var dataLayer = window.dataLayer || [];&lt;br /&gt;
		dataLayer.push({&#039;event&#039; : &#039;avia-form-submitted&#039;});&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: (Still not 100% on this)&lt;br /&gt;
&lt;br /&gt;
= Tracking Other Wordpress Ecommerce Plugins =&lt;br /&gt;
&lt;br /&gt;
== WooCommerce ==&lt;br /&gt;
&lt;br /&gt;
See Article: [[WooCommerce]]&lt;br /&gt;
&lt;br /&gt;
== Foxy Shop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://wiki.foxycart.com/v/2.0/receipt#using_custom_tracking_code&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
copy template from:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/wp-content/plugins/foxyshop/themefiles/foxyshop-receipt.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to theme / child theme root&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% if first_receipt_display %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;{{ order_id }}&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;{{ total_order }}&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% endif %}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var dataLayer = window.dataLayer || [];&lt;br /&gt;
dataLayer.push({&lt;br /&gt;
	&#039;order_id&#039; : &#039;&amp;lt;?php echo $transaction_id; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;order_value&#039; : &#039;&amp;lt;?php echo $order_total; ?&amp;gt;&#039;,&lt;br /&gt;
	&#039;event&#039; : &#039;order-submitted&#039;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chauffeur Booking System Plugin ==&lt;br /&gt;
&lt;br /&gt;
The Chauffeur Booking System Plugin is a paid for plug-in with very little documentation and hooks (actions and filters) to use.&amp;lt;br /&amp;gt;&lt;br /&gt;
The order ID &amp;amp; order value cannot be tracked without modification of the plugin.&lt;br /&gt;
&lt;br /&gt;
Below is code to track the booking completion.&lt;br /&gt;
Insert the code as a custom HTML tag in the tag manager:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
if (typeof jQuery != &#039;undefined&#039;) {&lt;br /&gt;
	(function ($) {&lt;br /&gt;
		var origCss = $.fn.css;&lt;br /&gt;
		$.fn.css = function(prop, value) {&lt;br /&gt;
			if( prop == &#039;display&#039; &amp;amp;&amp;amp; value == &#039;block&#039; &amp;amp;&amp;amp; this.hasClass(&#039;chbs-main-content-step-5&#039;) ) {&lt;br /&gt;
				var dataLayer = window.dataLayer || [];&lt;br /&gt;
				dataLayer.push({&#039;event&#039; : &#039;chauffeur-booking-form-submitted&#039;});&lt;br /&gt;
			}&lt;br /&gt;
			return origCss.apply(this, arguments);&lt;br /&gt;
		}&lt;br /&gt;
	})(jQuery);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=391</id>
		<title>Google Tag Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Google_Tag_Manager&amp;diff=391"/>
		<updated>2024-06-25T13:22:26Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= GTM =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://tagmanager.google.com/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Google Tag Manager is a site container used for storing and triggering scripts.&amp;lt;br /&amp;gt;&lt;br /&gt;
These then can be used for tracking.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Systems =&lt;br /&gt;
&lt;br /&gt;
Below are links to pages for different systems.&lt;br /&gt;
These pages will include the methods used for installing the Tag Manager and the Conversion Value tracking.&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Self-Host System !! On-site Builder Systems !! Chat Systems&lt;br /&gt;
|-&lt;br /&gt;
| [[CS-Cart]] || [[Bigcommerce]] || [[CollectChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Joomla]] || [[Ecwid]] || [[HubSpot Chat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 1.x]] || [[EKMPowershop]] || [[Jivo]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Magento 2.x]] || [[MyshopBlocks]] || [[LiveChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[OpenCart]] || [[Shopify]] || [[PureChat]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Prestashop]] || [[Squarespace]] || [[Tawk]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Tag Manager Installation (Wordpress)|Wordpress]] || [[Trill]] || [[Tidio]]&lt;br /&gt;
|-&lt;br /&gt;
| [[X-Cart]] || [[Wix]] || [[ZenDesk]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Zen Cart]] || [[Yell]] || [[Zoho]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Useful Info =&lt;br /&gt;
&lt;br /&gt;
== Generic jQuery Form Listener ==&lt;br /&gt;
&lt;br /&gt;
If there is no instructions in the wiki for a particular system and/or plugin and the form uses Ajax to submit,&lt;br /&gt;
It may be worth trying this generic form listener.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
depending on what the jQuery is called when initialized you may need to change &amp;quot;jQuery&amp;quot; to &amp;quot;$&amp;quot; in the code below.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
create a custom HTML tag and change the index URL to what the URL is submitting to in the Ajax form.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
jQuery(document).ready(function() {&lt;br /&gt;
	jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {&lt;br /&gt;
		if (~settings.url.indexOf(&amp;quot;/contact/form/process/&amp;quot;)) {&lt;br /&gt;
			var dataLayer = window.dataLayer || [];&lt;br /&gt;
			dataLayer.push({&#039;event&#039; : &#039;contact-form-submitted&#039;});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
note: the form must be using the actual jQuery&#039;s Ajax method to perform the request for this to work&lt;br /&gt;
&lt;br /&gt;
== Unique Page Views ==&lt;br /&gt;
&lt;br /&gt;
You can track unique page views by storing a value in the sessionStorage variable.&lt;br /&gt;
This can be useful for tracking forms where only a thank you page is available track.&lt;br /&gt;
&lt;br /&gt;
Create a tag that only fires on the page you want to track&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var gtm_fs_count = 1;&lt;br /&gt;
  var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g, &#039;F_SLASH&#039;);&lt;br /&gt;
  if (sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     gtm_fs_count = gtm_fs_count+1;&lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count);&lt;br /&gt;
    &lt;br /&gt;
  } else if(!sessionStorage[page_path]) {&lt;br /&gt;
    &lt;br /&gt;
     sessionStorage.setItem(page_path, gtm_fs_count) ;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a custom JS variable to retrieve the value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function() {&lt;br /&gt;
 var page_path = &amp;quot;{{Page Path}}&amp;quot;.replace(/\//g,&amp;quot;F_SLASH&amp;quot;);&lt;br /&gt;
 return parseInt(window.sessionStorage[page_path]); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then update the trigger to the variable is less than 2 as well as its existing conditions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cookie Consent Banner &amp;amp; Consent Mode V2 ==&lt;br /&gt;
&lt;br /&gt;
For clients that don&#039;t have this setup &amp;amp; functioning already, its possible to setup a consent mode friendly cookie banner using the below JS:&lt;br /&gt;
Within the .zip, the file is /build/cookieconsent.js&lt;br /&gt;
[[Media:Cookieconsent-master.zip|Cookieconsent-master.zip]]&lt;br /&gt;
&lt;br /&gt;
This file will need to be hosted somewhere that is accessible for the client site.&lt;br /&gt;
Once this has been done the below script will need to be added to the site, before GTM is loaded.&lt;br /&gt;
Make sure to swap cookieconsent.js with the location of the js file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;cookieconsent.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Define dataLayer and the gtag function.&lt;br /&gt;
    window.dataLayer = window.dataLayer || [];&lt;br /&gt;
    function gtag() { dataLayer.push(arguments); }&lt;br /&gt;
    window.CookieConsent.init({&lt;br /&gt;
        categories: {&lt;br /&gt;
            // Unique name.&lt;br /&gt;
            necessary: {&lt;br /&gt;
                needed: true,&lt;br /&gt;
                wanted: true,&lt;br /&gt;
                checked: true,&lt;br /&gt;
                // Language settings for categories.&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Strictly Necessary Cookies&#039;,&lt;br /&gt;
                            description: &#039;Cookies Required for the site to function as intended.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            analytics: {&lt;br /&gt;
                needed: false,&lt;br /&gt;
                wanted: false,&lt;br /&gt;
                checked: false,&lt;br /&gt;
                language: {&lt;br /&gt;
                    locale: {&lt;br /&gt;
                        en: {&lt;br /&gt;
                            name: &#039;Analytics&#039;,&lt;br /&gt;
                            description: &#039;Cookies used by Google &amp;amp; other 3rd party analytics services.&#039;,&lt;br /&gt;
                        },&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        consentModeControls: {&lt;br /&gt;
            ad_storage: &#039;analytics&#039;,&lt;br /&gt;
            ad_user_data: &#039;analytics&#039;,&lt;br /&gt;
            ad_personalization: &#039;analytics&#039;,&lt;br /&gt;
            analytics_storage: &#039;analytics&#039;&lt;br /&gt;
        },&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    if (localStorage.getItem(&#039;consentMode&#039;) === null) {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, {&lt;br /&gt;
            &#039;ad_storage&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_user_data&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;ad_personalization&#039;: &#039;denied&#039;,&lt;br /&gt;
            &#039;analytics_storage&#039;: &#039;denied&#039;&lt;br /&gt;
        });&lt;br /&gt;
    } else {&lt;br /&gt;
        gtag(&#039;consent&#039;, &#039;default&#039;, JSON.parse(localStorage.getItem(&#039;consentMode&#039;)));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional, but to make it look slightly better you could reduce the opacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    #cconsent-bar {&lt;br /&gt;
      opacity: 0.9;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Trill&amp;diff=390</id>
		<title>Trill</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Trill&amp;diff=390"/>
		<updated>2024-06-25T13:21:46Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: Created page with &amp;quot;Sign in from https://editor.trillwebsites.com/login&amp;lt;br /&amp;gt; Click on edit for the site to edit.&amp;lt;/br&amp;gt;  = Adding GTM to the Site =  Click on SEO &amp;amp; Settings.&amp;lt;br /&amp;gt; Click on Head HTML.&amp;lt;br /&amp;gt; Add Tag Manager to the head section and the noscript to the body section &amp;amp; save it.&amp;lt;br /&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sign in from https://editor.trillwebsites.com/login&amp;lt;br /&amp;gt;&lt;br /&gt;
Click on edit for the site to edit.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Adding GTM to the Site =&lt;br /&gt;
&lt;br /&gt;
Click on SEO &amp;amp; Settings.&amp;lt;br /&amp;gt;&lt;br /&gt;
Click on Head HTML.&amp;lt;br /&amp;gt;&lt;br /&gt;
Add Tag Manager to the head section and the noscript to the body section &amp;amp; save it.&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=379</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=379"/>
		<updated>2024-04-04T11:26:35Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reset permissions&lt;br /&gt;
&lt;br /&gt;
= Reset Permissions =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find . -type d -not -perm 2755 -exec chmod 2755 {} \;&lt;br /&gt;
find . -type f -not -perm 0644 -exec chmod 0644 {} \;&lt;br /&gt;
find . ! -user www-data -exec chown www-data:www-data {} \;&lt;br /&gt;
chmod +x bin/console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= development =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install npm&lt;br /&gt;
sudo npm install --global yarn&lt;br /&gt;
sudo npm install @angular/cli@16.2.13&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=378</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=378"/>
		<updated>2024-04-04T11:26:27Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reset permissions&lt;br /&gt;
&lt;br /&gt;
= Reset Permissions =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find . -type d -not -perm 2755 -exec chmod 2755 {} \;&lt;br /&gt;
find . -type f -not -perm 0644 -exec chmod 0644 {} \;&lt;br /&gt;
find . ! -user www-data -exec chown www-data:www-data {} \;&lt;br /&gt;
chmod +x bin/console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= development =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install npm&lt;br /&gt;
sudo npm install --global yarn&lt;br /&gt;
sudo npm install @angular/cli@16.2.13&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=OpenCart&amp;diff=359</id>
		<title>OpenCart</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=OpenCart&amp;diff=359"/>
		<updated>2024-02-09T14:41:01Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Conversion Value */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Tag Manager =&lt;br /&gt;
&lt;br /&gt;
Install Tag Manager.&lt;br /&gt;
*Note, the OCmod &amp;amp; VQmod scripts below insert the Tag Manager.&lt;br /&gt;
&lt;br /&gt;
Main Template file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/catalog/view/theme/&amp;lt;&amp;lt;Theme Folder&amp;gt;&amp;gt;/template/common/header.tpl &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion URLS ==&lt;br /&gt;
Contact Thank-you URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=information/contact/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sale Thank-you URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=checkout/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Account Creation URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
index.php?route=account/success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Value ==&lt;br /&gt;
&lt;br /&gt;
The easiest and most reliable way to install the Conversion value tracking is via extensions that inject the code directly into core files.&amp;lt;br /&amp;gt;&lt;br /&gt;
These are upgrade safe! (The worst that can happen is that a reference can change and the code is not injected)&amp;lt;br /&amp;gt;&lt;br /&gt;
Before using these, it is best to check that the references are the same.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Change the GTM ID&#039;s in the scripts!&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenCart 2.x uses .tpl files&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenCart 3.x uses .twig files&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VQmod ===&lt;br /&gt;
An OpenCart extension called VQmod is required to insert it into the code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vqmod/xml/get_total_to_success.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:Get total to success.xml|Get_total_to_success.xml]]&lt;br /&gt;
&lt;br /&gt;
=== OCmod ===&lt;br /&gt;
&lt;br /&gt;
An OpenCart extension called OCmod is required to insert it into the code.&lt;br /&gt;
&lt;br /&gt;
[[Media:Gtm.ocmod.zip|Gtm.ocmod.zip]]&lt;br /&gt;
&lt;br /&gt;
= Feeds =&lt;br /&gt;
&lt;br /&gt;
The Google Base extension will need to be installed and activated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://docs.opencart.com/en-gb/extension/feed/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The URL for the generated Feed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/index.php?route=feed/google_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=357</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=357"/>
		<updated>2024-01-19T12:19:45Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;SuiteCRM-&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reset permissions&lt;br /&gt;
&lt;br /&gt;
= Reset Permissions =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find . -type d -not -perm 2755 -exec chmod 2755 {} \;&lt;br /&gt;
find . -type f -not -perm 0644 -exec chmod 0644 {} \;&lt;br /&gt;
find . ! -user www-data -exec chown www-data:www-data {} \;&lt;br /&gt;
chmod +x bin/console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=356</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=356"/>
		<updated>2024-01-19T10:30:55Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reset permissions&lt;br /&gt;
&lt;br /&gt;
= Reset Permissions =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find . -type d -not -perm 2755 -exec chmod 2755 {} \;&lt;br /&gt;
find . -type f -not -perm 0644 -exec chmod 0644 {} \;&lt;br /&gt;
find . ! -user www-data -exec chown www-data:www-data {} \;&lt;br /&gt;
chmod +x bin/console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=355</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=355"/>
		<updated>2024-01-19T10:29:00Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Update =&lt;br /&gt;
&lt;br /&gt;
Download and put file in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/package/upgrade/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then run commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/console suitecrm:app:upgrade -t &amp;quot;&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
./bin/console suitecrm:app:upgrade-finalize -t &amp;quot;&amp;lt;version&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=354</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=354"/>
		<updated>2024-01-19T10:26:09Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Main Subjects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Login to make changes ==&lt;br /&gt;
You can login using firstname.surname as the username.&amp;lt;br /&amp;gt;&lt;br /&gt;
The password is the same as the tools login.&lt;br /&gt;
&lt;br /&gt;
== Main Subjects ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager Installation: [[Google Tag Manager]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Getting Feeds: [[Feeds]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s Encrypt: [[LetsEncrypt]]&lt;br /&gt;
&lt;br /&gt;
SuiteCRM 8.x: [[SuiteCRM_8.x]]&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=353</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=353"/>
		<updated>2024-01-19T10:25:41Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Cron Jobs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=352</id>
		<title>SuiteCRM 8.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=SuiteCRM_8.x&amp;diff=352"/>
		<updated>2024-01-19T10:25:36Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: Created page with &amp;quot;= Cron Jobs = &amp;lt;pre&amp;gt; sudo crontab -e -u www-data &amp;lt;/pr&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cron Jobs =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo crontab -e -u www-data&lt;br /&gt;
&amp;lt;/pr&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Magento_2.x&amp;diff=351</id>
		<title>Magento 2.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Magento_2.x&amp;diff=351"/>
		<updated>2024-01-09T10:04:25Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tag Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tag Installation =&lt;br /&gt;
add it to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Content &amp;gt; Design &amp;gt; Configuration &amp;gt; Edit the Store View &amp;gt; Other Settings &amp;gt; HTML Head&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Content &amp;gt; Design &amp;gt; Configuration &amp;gt; Edit the Store View &amp;gt; Other Settings &amp;gt; Footer &amp;gt; Miscellaneous HTML&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking ==&lt;br /&gt;
&lt;br /&gt;
== Add to Head ==&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; Content &amp;gt; Configuration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Clearing Cache =&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; System &amp;gt; Cache Management&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then Click &amp;quot;Clear Cache&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Varnish Cache ==&lt;br /&gt;
Magento 2 May have Varnish Cache enabled.&lt;br /&gt;
This is a HTML Page Cache and caches on a page basis.&lt;br /&gt;
If this is enabled this needs to be cleared as well.&lt;br /&gt;
&lt;br /&gt;
This will be located underneath the other cache options.&lt;br /&gt;
&lt;br /&gt;
= Feeds =&lt;br /&gt;
All Major feed plugins for Magento 2.x are paid for plugins.&lt;br /&gt;
&lt;br /&gt;
== WyoMind Data Feed Manager plugin ==&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; WyoMind &amp;gt; Data Feed Manager &amp;gt; Data Feeds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
XML to Use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;!-- Basic Product Information --&amp;gt;&lt;br /&gt;
&amp;lt;g:id&amp;gt;{{product.sku}}&amp;lt;/g:id&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;{{product.name}}&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;{{parent.url | product.url}}&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;{{parent.description output=&amp;quot;strip_tags($self)&amp;quot; | product.description output=&amp;quot;strip_tags($self)&amp;quot;}}&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;g:google_product_category&amp;gt;{{product.google_product_category | parent.google_product_category}}&amp;lt;/g:google_product_category&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=0 | product.categories nth=0 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=1 | product.categories nth=1 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=2 | product.categories nth=2 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=3 | product.categories nth=3 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=4 | product.categories nth=4 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=5 | product.categories nth=5 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=6 | product.categories nth=6 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=7 | product.categories nth=7 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=8 | product.categories nth=8 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=9 | product.categories nth=9 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:image_link&amp;gt;{{product.image_link index=&amp;quot;0&amp;quot; | parent.image_link index=&amp;quot;0&amp;quot;}}&amp;lt;/g:image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;1&amp;quot; | parent.image_link index=&amp;quot;1&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;2&amp;quot; | parent.image_link index=&amp;quot;2&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;3&amp;quot; | parent.image_link index=&amp;quot;3&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;4&amp;quot; | parent.image_link index=&amp;quot;4&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;5&amp;quot; | parent.image_link index=&amp;quot;5&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Availability &amp;amp; Price --&amp;gt;&lt;br /&gt;
&amp;lt;g:availability&amp;gt;{{product.availability}}&amp;lt;/g:availability&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:price&amp;gt;{{product.price currency=GBP vat_rate=0 suffix=&amp;quot; GBP&amp;quot;}}&amp;lt;/g:price&amp;gt;&lt;br /&gt;
&amp;lt;g:sale_price&amp;gt;{{product.sale_price currency=GBP vat_rate=0 suffix=&amp;quot; GBP&amp;quot;}}&amp;lt;/g:sale_price&amp;gt;&lt;br /&gt;
&amp;lt;g:sale_price_effective_date&amp;gt;{{product.sale_price_effective_date}}&amp;lt;/g:sale_price_effective_date&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:condition&amp;gt;{{product.condition}}&amp;lt;/g:condition&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unique Product Identifiers--&amp;gt;&lt;br /&gt;
&amp;lt;g:brand&amp;gt;{{product.brand}}&amp;lt;/g:brand&amp;gt;&lt;br /&gt;
&amp;lt;g:gtin&amp;gt;{{product.upc}}&amp;lt;/g:gtin&amp;gt;&lt;br /&gt;
&amp;lt;g:mpn&amp;gt;{{product.mpn}}&amp;lt;/g:mpn&amp;gt;&lt;br /&gt;
&amp;lt;g:identifier_exists&amp;gt;TRUE&amp;lt;/g:identifier_exists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Apparel Products --&amp;gt;&lt;br /&gt;
&amp;lt;g:gender&amp;gt;{{product.gender}}&amp;lt;/g:gender&amp;gt;&lt;br /&gt;
&amp;lt;g:age_group&amp;gt;{{product.age_group}}&amp;lt;/g:age_group&amp;gt;&lt;br /&gt;
&amp;lt;g:color&amp;gt;{{product.color}}&amp;lt;/g:color&amp;gt;&lt;br /&gt;
&amp;lt;g:size&amp;gt;{{product.size}}&amp;lt;/g:size&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Product Variants --&amp;gt;&lt;br /&gt;
&amp;lt;g:item_group_id&amp;gt;{{parent.sku}}&amp;lt;/g:item_group_id&amp;gt;&lt;br /&gt;
&amp;lt;g:material&amp;gt;{{product.material}}&amp;lt;/g:material&amp;gt;&lt;br /&gt;
&amp;lt;g:pattern&amp;gt;{{product.pattern}}&amp;lt;/g:pattern&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Shipping --&amp;gt;&lt;br /&gt;
&amp;lt;g:shipping_weight&amp;gt;{{product.weight output=&amp;quot;float($self,2)&amp;quot; suffix=&amp;quot;kg&amp;quot;}}&amp;lt;/g:shipping_weight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- AdWords attributes --&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_0&amp;gt;{{product.custom_label_0}}&amp;lt;/g:custom_label_0&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_1&amp;gt;{{product.custom_label_1}}&amp;lt;/g:custom_label_1&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_2&amp;gt;{{product.custom_label_2}}&amp;lt;/g:custom_label_2&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_3&amp;gt;{{product.custom_label_3}}&amp;lt;/g:custom_label_3&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_4&amp;gt;{{product.custom_label_4}}&amp;lt;/g:custom_label_4&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Magento_2.x&amp;diff=350</id>
		<title>Magento 2.x</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Magento_2.x&amp;diff=350"/>
		<updated>2024-01-09T10:04:04Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Tag Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tag Installation =&lt;br /&gt;
add it to:&lt;br /&gt;
Content &amp;gt; Design &amp;gt; Configuration &amp;gt; Edit the Store View &amp;gt; Other Settings &amp;gt; HTML Head&lt;br /&gt;
and&lt;br /&gt;
Content &amp;gt; Design &amp;gt; Configuration &amp;gt; Edit the Store View &amp;gt; Other Settings &amp;gt; Footer &amp;gt; Miscellaneous HTML&lt;br /&gt;
&lt;br /&gt;
== Conversion Tracking ==&lt;br /&gt;
&lt;br /&gt;
== Add to Head ==&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; Content &amp;gt; Configuration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Clearing Cache =&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; System &amp;gt; Cache Management&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then Click &amp;quot;Clear Cache&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Varnish Cache ==&lt;br /&gt;
Magento 2 May have Varnish Cache enabled.&lt;br /&gt;
This is a HTML Page Cache and caches on a page basis.&lt;br /&gt;
If this is enabled this needs to be cleared as well.&lt;br /&gt;
&lt;br /&gt;
This will be located underneath the other cache options.&lt;br /&gt;
&lt;br /&gt;
= Feeds =&lt;br /&gt;
All Major feed plugins for Magento 2.x are paid for plugins.&lt;br /&gt;
&lt;br /&gt;
== WyoMind Data Feed Manager plugin ==&lt;br /&gt;
&lt;br /&gt;
Go to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Admin Panel &amp;gt; WyoMind &amp;gt; Data Feed Manager &amp;gt; Data Feeds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
XML to Use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;!-- Basic Product Information --&amp;gt;&lt;br /&gt;
&amp;lt;g:id&amp;gt;{{product.sku}}&amp;lt;/g:id&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;{{product.name}}&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;{{parent.url | product.url}}&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;{{parent.description output=&amp;quot;strip_tags($self)&amp;quot; | product.description output=&amp;quot;strip_tags($self)&amp;quot;}}&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;g:google_product_category&amp;gt;{{product.google_product_category | parent.google_product_category}}&amp;lt;/g:google_product_category&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=0 | product.categories nth=0 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=1 | product.categories nth=1 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=2 | product.categories nth=2 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=3 | product.categories nth=3 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=4 | product.categories nth=4 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=5 | product.categories nth=5 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=6 | product.categories nth=6 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=7 | product.categories nth=7 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=8 | product.categories nth=8 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&amp;lt;g:product_type&amp;gt;{{parent.categories nth=9 | product.categories nth=9 }}&amp;lt;/g:product_type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:image_link&amp;gt;{{product.image_link index=&amp;quot;0&amp;quot; | parent.image_link index=&amp;quot;0&amp;quot;}}&amp;lt;/g:image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;1&amp;quot; | parent.image_link index=&amp;quot;1&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;2&amp;quot; | parent.image_link index=&amp;quot;2&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;3&amp;quot; | parent.image_link index=&amp;quot;3&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;4&amp;quot; | parent.image_link index=&amp;quot;4&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&amp;lt;g:additional_image_link&amp;gt;{{product.image_link index=&amp;quot;5&amp;quot; | parent.image_link index=&amp;quot;5&amp;quot;}}&amp;lt;/g:additional_image_link&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Availability &amp;amp; Price --&amp;gt;&lt;br /&gt;
&amp;lt;g:availability&amp;gt;{{product.availability}}&amp;lt;/g:availability&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:price&amp;gt;{{product.price currency=GBP vat_rate=0 suffix=&amp;quot; GBP&amp;quot;}}&amp;lt;/g:price&amp;gt;&lt;br /&gt;
&amp;lt;g:sale_price&amp;gt;{{product.sale_price currency=GBP vat_rate=0 suffix=&amp;quot; GBP&amp;quot;}}&amp;lt;/g:sale_price&amp;gt;&lt;br /&gt;
&amp;lt;g:sale_price_effective_date&amp;gt;{{product.sale_price_effective_date}}&amp;lt;/g:sale_price_effective_date&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;g:condition&amp;gt;{{product.condition}}&amp;lt;/g:condition&amp;gt;&lt;br /&gt;
&amp;lt;!-- Unique Product Identifiers--&amp;gt;&lt;br /&gt;
&amp;lt;g:brand&amp;gt;{{product.brand}}&amp;lt;/g:brand&amp;gt;&lt;br /&gt;
&amp;lt;g:gtin&amp;gt;{{product.upc}}&amp;lt;/g:gtin&amp;gt;&lt;br /&gt;
&amp;lt;g:mpn&amp;gt;{{product.mpn}}&amp;lt;/g:mpn&amp;gt;&lt;br /&gt;
&amp;lt;g:identifier_exists&amp;gt;TRUE&amp;lt;/g:identifier_exists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Apparel Products --&amp;gt;&lt;br /&gt;
&amp;lt;g:gender&amp;gt;{{product.gender}}&amp;lt;/g:gender&amp;gt;&lt;br /&gt;
&amp;lt;g:age_group&amp;gt;{{product.age_group}}&amp;lt;/g:age_group&amp;gt;&lt;br /&gt;
&amp;lt;g:color&amp;gt;{{product.color}}&amp;lt;/g:color&amp;gt;&lt;br /&gt;
&amp;lt;g:size&amp;gt;{{product.size}}&amp;lt;/g:size&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Product Variants --&amp;gt;&lt;br /&gt;
&amp;lt;g:item_group_id&amp;gt;{{parent.sku}}&amp;lt;/g:item_group_id&amp;gt;&lt;br /&gt;
&amp;lt;g:material&amp;gt;{{product.material}}&amp;lt;/g:material&amp;gt;&lt;br /&gt;
&amp;lt;g:pattern&amp;gt;{{product.pattern}}&amp;lt;/g:pattern&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Shipping --&amp;gt;&lt;br /&gt;
&amp;lt;g:shipping_weight&amp;gt;{{product.weight output=&amp;quot;float($self,2)&amp;quot; suffix=&amp;quot;kg&amp;quot;}}&amp;lt;/g:shipping_weight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- AdWords attributes --&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_0&amp;gt;{{product.custom_label_0}}&amp;lt;/g:custom_label_0&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_1&amp;gt;{{product.custom_label_1}}&amp;lt;/g:custom_label_1&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_2&amp;gt;{{product.custom_label_2}}&amp;lt;/g:custom_label_2&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_3&amp;gt;{{product.custom_label_3}}&amp;lt;/g:custom_label_3&amp;gt;&lt;br /&gt;
&amp;lt;g:custom_label_4&amp;gt;{{product.custom_label_4}}&amp;lt;/g:custom_label_4&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=346</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=Main_Page&amp;diff=346"/>
		<updated>2023-10-25T09:09:30Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: /* Main Subjects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Login to make changes ==&lt;br /&gt;
You can login using firstname.surname as the username.&amp;lt;br /&amp;gt;&lt;br /&gt;
The password is the same as the tools login.&lt;br /&gt;
&lt;br /&gt;
== Main Subjects ==&lt;br /&gt;
&lt;br /&gt;
Google Tag Manager Installation: [[Google Tag Manager]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Getting Feeds: [[Feeds]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s Encrypt: [[LetsEncrypt]]&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
	<entry>
		<id>https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=345</id>
		<title>LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.growth.agency/index.php?title=LetsEncrypt&amp;diff=345"/>
		<updated>2023-10-25T09:08:46Z</updated>

		<summary type="html">&lt;p&gt;Aaron.trevellick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Let&#039;s Encrypt on Ubuntu server with apache ==&lt;br /&gt;
&lt;br /&gt;
First update the server&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run these command to install and config certbot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install certbot python3-certbot-apache&lt;br /&gt;
sudo apache2ctl configtest&lt;br /&gt;
sudo systemctl reload apache2&lt;br /&gt;
sudo ufw allow &#039;Apache Full&#039;&lt;br /&gt;
&lt;br /&gt;
sudo certbot --apache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check auto renewal status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl status certbot.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaron.trevellick</name></author>
	</entry>
</feed>