首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在is_user_logged_in()中调用JavaScript

如何在is_user_logged_in()中调用JavaScript
EN

Stack Overflow用户
提问于 2022-04-13 17:42:32
回答 3查看 68关注 0票数 0

我试图检查用户是否登录(在页面的标题中),这样我就可以决定是否在中计算该用户。我所需要的只是函数中的true或false (0/1),但我不知道如何在JS中正确地调用它。

您可以忽略IF块中的部分,这只是一个dataLayer推送,因此我以后可以使用相应的值来触发Google标记。

到目前为止,我尝试了这些选择,但没有运气:

代码语言:javascript
复制
   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>
代码语言:javascript
复制
<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>```
EN

回答 3

Stack Overflow用户

发布于 2022-04-14 18:35:51

在PHP中回显错误不会将任何内容打印到屏幕上。这就是为什么您的第一个示例不起作用,当用户没有登录时,它会产生无效的JS。

代码语言:javascript
复制
logintemp= ;

这样做的一个简单方法是确保您json_encode服务器端的数据,以便JS能够访问它。由于JSON是JS的一个子集,它将正确地转义任何内容,并生成一个可以分配给变量的有效表达式。

代码语言:javascript
复制
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'
   });
}

上面的内容可以简化为

代码语言:javascript
复制
var isLoggedIn = <?php echo json_encode(is_user_logged_in()) ?>;
window.dataLayer = window.dataLayer || [];      
window.dataLayer.push({
   userLoggedIn: isLoggedIn ? '1' : '0'
});

请参阅变量从html到javascript。

用PHP生成JavaScript

动态生成的代码,如@Clarus所建议的,在您尝试在这两个环境中对代码进行对齐时,会使读取和维护代码变得更加困难。

在单个位置上,所有服务器端数据都驱动代码,这使得调试代码变得更加容易,因为JavaScript代码本身并没有变化,只是一个值。

票数 1
EN

Stack Overflow用户

发布于 2022-04-13 18:23:44

您所需要的只是一个端点,如果用户登录,则返回1,否则是0

代码语言:javascript
复制
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();
票数 -1
EN

Stack Overflow用户

发布于 2022-04-14 18:17:21

@Clarus要人在Wordpress-Org论坛上通过一个插件提供了一个很好的解决方案,确保头代码在标题中执行。他第一次让我执行这个命令,以确认一切都正常:

代码语言:javascript
复制
<?php
if ( is_user_logged_in() ) {
    echo 'Welcome, registered user!';
} else {
    echo 'Welcome, visitor!';
}
?>

然后,我使用他的解决方案完成了dataLayer推送,并完美地工作了!

代码语言:javascript
复制
<?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
}
?>

我用来插入代码的插件:头、脚和后注入插件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71861752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档