GTM documentation 表示包含两个片段,1个在后面<head>
开始标记和1之后<body>
打开标签。最初,我是在孩子的标题中添加代码片段。php文件。我想放弃这个方法,改用纯JS,主要是因为父主题更新。
我编写了下面的代码以在函数中使用。php,但它不起作用,我不知道我做错了什么。
Edit : 我得到的错误是Uncaught TypeError: Cannot read property \'insertBefore\' of null
对于document.body.insertBefore(el, document.body.firstChild);
<?php
add_action( \'wp_head\', \'webplus_hook_gtm\' );
function webplus_hook_gtm() {
?>
<script type="text/javascript">
var para = document.createElement("script");
var t = document.createTextNode(
"(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\');"
);
para.appendChild(t);
document.head.insertBefore(para, document.head.firstChild);
var el = document.createElement("noscript");
var ifrm = document.createElement("iframe");
ifrm.setAttribute(
"src",
"https://www.googletagmanager.com/ns.html?id=GTM-XXXX"
);
ifrm.setAttribute("height", "0");
ifrm.setAttribute("width", "0");
ifrm.setAttribute("style", "display:none;visibility:hidden");
el.appendChild(ifrm);
document.body.insertBefore(el, document.body.firstChild);
</script>
<?php
};
蒂亚,非常感谢你的帮助。
SO网友:JackLinkers
感谢您的所有贡献,帮助我理解我的错误并解决我的问题,特别是“Krzysiek Dródż”的提示和“Jacob”的部分解决方案。这是我的最终工作代码:
<?php
add_action( \'wp_head\', \'webplus_hook_gtm\' );
function webplus_hook_gtm() {
?>
<script>
var para = document.createElement("script");
var t = document.createTextNode(
"(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\');"
);
para.appendChild(t);
document.head.insertBefore(para, document.head.firstChild);
</script>
<?php
};
add_action( \'wp_body_open\', \'webplus_hook_gtm_noscript\' );
function webplus_hook_gtm_noscript() {
?>
<script>
var el = document.createElement("noscript");
var ifrm = document.createElement("iframe");
ifrm.setAttribute(
"src",
"https://www.googletagmanager.com/ns.html?id=GTM-XXXX"
);
ifrm.setAttribute("height", "0");
ifrm.setAttribute("width", "0");
ifrm.setAttribute("style", "display:none;visibility:hidden");
el.appendChild(ifrm);
document.body.insertBefore(el, document.body.firstChild);
</script>
<?php
};