传递Wordpress $current_user数据,以便在嵌入的javascript中用于预填充表单字段

Passing Wordpress $current_user data to be used in embbebed javascript to pre-populate form fields

本文关键字:javascript 用于 字段 表单 填充 current Wordpress user 数据 传递      更新时间:2023-09-26

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

所以我得到了一个带有用户登录功能的wordpress网站,我通过Zendesk Web Widget提供支持,这基本上是一个支持联系表单。我试图预填充显示名称&支持表单中的电子邮件字段包含当前登录的用户信息。

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

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个关于这个主题的帖子,但没有一个对我有一个有效的解决方案。

注:如果我在这里犯了一个错误,或者如果我没有把我的问题写好,我再次感到抱歉,这是我第一次!

结果我想出了一个更好的方法来做到这一点,感谢Erik Westlund在这里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
    });
});

希望这对将来的人有用!