Skip to content

Instantly share code, notes, and snippets.

@jsn789
Last active March 28, 2023 15:38
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save jsn789/52ad87efb911c65e28fff01c8e7acada to your computer and use it in GitHub Desktop.
Save jsn789/52ad87efb911c65e28fff01c8e7acada to your computer and use it in GitHub Desktop.
Add Google Tag Manager through functions.php in WordPress
/* Add Google Tag Manager javascript code as close to
the opening <head> tag as possible
=====================================================*/
function add_gtm_head(){
?>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXX');</script>
<!-- End Google Tag Manager -->
<?php
}
add_action( 'wp_head', 'add_gtm_head', 10 );
/* Add Google Tag Manager noscript codeimmediately after
the opening <body> tag
========================================================*/
function add_gtm_body(){
?>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<?php
}
add_action( 'body_top', 'add_gtm_body' );
@jsn789
Copy link
Author

jsn789 commented Dec 20, 2018

I was getting Uncaught Error: Call to undefined function body_top() so I simply changed <?php body_top(); ?> to <?php do_action('body_top'); ?>

Thank you for the contribution, I've updated my comment above to reflect that!

@tokyographer
Copy link

Thanks for the tip. What does the number 10 do in this function?
add_action( 'wp_head', 'add_gtm_head', 10 );

@raulfunkie
Copy link

@tokyographer It adds priority to the script to it executes before anything else.

@lewiss444
Copy link

Jupiter theme already had body_class instead of body_top

@marklsanders
Copy link

Thanks for the tip. What does the number 10 do in this function?
add_action( 'wp_head', 'add_gtm_head', 10 );

Just wanted to say:

if you leave the add_action as priority 10 (see the comments by tokyographer and raulfunkie above), the script is placed halfway down the section; I changed my priority to 1 and the script was placed immediately after the last tag in the section: exactly where I wanted it and, probably, where it 'shouldl' go!
Thanks very much for this

@obviousdisaster
Copy link

Change line 32 to:

add_action( 'wp_body_open', 'add_gtm_body' );

@mb-joakim
Copy link

@jsn789

To make the above work, the header.php file needs to be updated by adding:

No need to. Better to use hooks in WP template.

wp_head ( https://developer.wordpress.org/reference/hooks/wp_head/ )
wp_body_open ( https://developer.wordpress.org/reference/hooks/wp_body_open/ )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment