我试图检查用户是否登录(在页面的标题中),这样我就可以决定是否在中计算该用户。我所需要的只是函数中的true或false (0/1),但我不知道如何在JS中正确地调用它。
您可以忽略IF块中的部分,这只是一个dataLayer推送,因此我以后可以使用相应的值来触发Google标记。
到目前为止,我尝试了这些选择,但没有运气:
var logintemp=0;
logintemp=<?php echo is_user_logged_in() ?> ;
if (logintemp) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn' : '1'
});}
else {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn' : '0'
});}
</script><script type="text/javascript">
if ('<?php is_user_logged_in(); ?>') {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn' : '1'
});}
else {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn' : '0'
});}
</script>```发布于 2022-04-14 18:35:51
在PHP中回显错误不会将任何内容打印到屏幕上。这就是为什么您的第一个示例不起作用,当用户没有登录时,它会产生无效的JS。
logintemp= ;这样做的一个简单方法是确保您json_encode服务器端的数据,以便JS能够访问它。由于JSON是JS的一个子集,它将正确地转义任何内容,并生成一个可以分配给变量的有效表达式。
var isLoggedIn = <?php echo json_encode(is_user_logged_in()) ?>;
if (isLoggedIn) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn': '1'
});
}
else {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn': '0'
});
}上面的内容可以简化为
var isLoggedIn = <?php echo json_encode(is_user_logged_in()) ?>;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
userLoggedIn: isLoggedIn ? '1' : '0'
});用PHP生成JavaScript
动态生成的代码,如@Clarus所建议的,在您尝试在这两个环境中对代码进行对齐时,会使读取和维护代码变得更加困难。
在单个位置上,所有服务器端数据都驱动代码,这使得调试代码变得更加容易,因为JavaScript代码本身并没有变化,只是一个值。
发布于 2022-04-13 18:23:44
您所需要的只是一个端点,如果用户登录,则返回1,否则是0。
let XHR = new XMLHttpRequest();
XHR.open( 'GET', '/yourEndPoint' );
XHR.onreadystatechange = function() {
if (this.status == 200) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userLoggedIn' : XHR.responseText
});
//Do something else here
}
};
XHR.send();发布于 2022-04-14 18:17:21
@Clarus要人在Wordpress-Org论坛上通过一个插件提供了一个很好的解决方案,确保头代码在标题中执行。他第一次让我执行这个命令,以确认一切都正常:
<?php
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
} else {
echo 'Welcome, visitor!';
}
?>然后,我使用他的解决方案完成了dataLayer推送,并完美地工作了!
<?php
if ( is_user_logged_in() ) {
?>
<script>
//Your JavaScript for when user is logged in
</script>
<?php
} else {
?>
<script>
//Your JavaScript for when user is logged out
</script>
<?php
}
?>我用来插入代码的插件:头、脚和后注入插件。
https://stackoverflow.com/questions/71861752
复制相似问题