传递Wordpress $ current_user数据以在embbebed javascript中使用以预先填充表单字段

时间:2016-10-12 23:12:45

标签: javascript php wordpress

首先我只是想说这是我在StackOverflow上的第一个问题,所以我现在要道歉,因为我可能会犯这样的错误。

所以我有一个带有用户登录功能的wordpress网站,我通过Zendesk Web Widget提供支持,它基本上是一个支持联系表单。 我正在尝试预先填充显示名称和使用当前登录的用户信息在支持表单中的电子邮件字段。

通过我的研究,我发现Wordpress已经有了一个函数:get_currentuserinfo(),我可以将数据传递给我的functions.php子主题:

function get_user($type = 'ID')
{
     global $current_user;
     get_currentuserinfo();

     switch ($type)
     {
          case 'ID':
               return $current_user->ID;
               break;
          case 'displayname':
               return $current_user->display_name;
               break;
          case 'username':
               return $current_user->user_login;
               break;
          case 'firstname':
               return $current_user->user_firstname;
               break;
          case 'lastname':
               return $current_user->user_lastname;
               break;
          case 'level':
               return $current_user->user_level;
               break;
          case 'email':
               return $current_user->user_email;
               break;
          default:
               return;
     }
}

并使用echo get_user('displayname');在javascript中使用显示名称。

  

来源:http://www.devdevote.com/cms/wordpress-hacks/get_user

所以我做了一些尝试,但都没有成功。我试过这些:

尝试1:

<script>
    var $wpName = <?php echo get_user('displayname') ?>;
    var $wpEmail = <?php echo get_user('email') ?>;

    zE(function() {
        zE.identify({
            name: $wpName,
            email: $wpEmail
        });

    });
</script>

尝试2:

<script>
    zE(function() {
        zE.identify({
            name: <?php echo get_user('displayname') ?>,
            email: <?php echo get_user('email') ?>
        });
    });
</script>

尝试3:

<script>
    var $wpName = $current_user->user_firstname;
    var $wpEmail = $current_user->user_email;

    zE(function() {
        zE.identify({
            name: <?php echo get_user('displayname') ?>,
            email: <?php echo get_user('email') ?>
        });
    });
</script>

这里有没有人有想法或只是如何做到这一点的线索? 我一整天都在努力做这项工作,阅读大约20到30个关于这个问题的主题,但没有一个能为我提供有效的解决方案..

P.S。如果我在这里发布错误或者如果我没有很好地写出我的问题,我很抱歉,这是我的第一次!

1 个答案:

答案 0 :(得分:0)

原来我想出了一个更好的方法,感谢Erik Westlund here on StackOverflow

它没有工作,因为我的javascript代码中的PHP没有被处理,所以任何echo语句都会导致失败。 所以我不得不转向另一种解决方案:json_encode()

因此,只需将这几行代码添加到新的页面模板文件中,我就能够使其工作:

<?php global $current_user;
get_currentuserinfo();
$user_name = $current_user->display_name;
$user_email = $current_user->user_email;
?>

<script type="text/javascript">
var username = <?php echo json_encode($user_name) ?> ;
var useremail = <?php echo json_encode($user_email) ?> ;
</script>

然后我只需要在我的javascript中使用它:

zE(function() {
    zE.identify({
        name: username,
        email: useremail
    });
});

希望这对未来的某些人有用!