在wordpress functions.php文件中的javascript函数中使用$ _SESSION

时间:2017-09-02 03:17:33

标签: javascript php jquery wordpress session

我现在用wordpress和functions.php文件遇到了一些麻烦。作为参考,我使用忍者表格和弹出式制作工具。

我有一堆按钮。当您单击一个按钮时,它会打开一个模式,用户将在其中输入其联系信息。然后存储该信息并显示成功消息,其中包含指向用户请求的资源的链接。由于我不希望用户必须继续填写每个资源的信息,因此我存储了一个cookie。为了弥补这一点,我将用户的信息存储在$_SESSION变量中,因为我仍然想知道用户何时点击了资源链接。

因为我正在使用忍者表单,所以我正在挂钩ninja_forms_after_submission函数并将会话存储在那里。

function register_session(){
  if(!session_id()){
    session_start();
  }
}
add_action('init','register_session',1);

add_action('ninja_forms_after_submission','test');
function test($form_data){
  // assume ive processed some data here
  // and $form_data['name'] / $form_data['email'] is valid
  register_session();
  $_SESSION['name'] = $form_data['name'];
  $_SESSION['email'] = $form_data['email'];
}

冷却。这有效,我可以回显$_SESSION并查看有效数据。现在,由于用户点击了链接,我想仍然捕获会话,我正在执行以下操作(在上面的代码下面,仍在functions.php中):

add_action('wp_footer','save_session',500);
function save_session(){
?>
<script type="text/javascript">
  (function($,document,undefined){
    $(document).on('click','.pum-trigger',function(){
      var post = {};
      post['name'] = "<?php echo $_SESSION['name']; ?>";
      post['email'] = "<?php echo $_SESSION['email']; ?>";
      post['action'] = 'get_resource';
      $.post(ajaxurl,post,function(response){
      });
    });
  }(jQuery,document))
</script>
<?php
}

add_action('wp_ajax_get_resource','get_resource');
add_action('wp_ajax_nopriv_get_resource','get_resource');
function get_resource(){
  echo json_encode($_POST);
}

每次用户在填写第一个表单后单击资源链接时,此代码都会起作用并触发。

问题是,$_SESSION['name']$_SESSION['email']在用户刷新页面之前不会加载到javascript函数中。

因此,如果我将信息Name: TestEmail: test@test.com输入到弹出的第一个表单中,并验证$_SESSION['name']$_SESSION['email']已保存(通过打印出来)在忍者形式钩子),然后我点击另一个链接,行echo json_encode($_POST);仅显示:{"name" : "", "email" : ""}

刷新页面并点击链接后,echo json_encode($_POST);现在显示:{"name" : "test", "email" : "test@test.com"}

这个问题是用户可能不会自己刷新页面。有没有办法让test()函数中保存的值显示在save_session()函数中而不重新加载页面?我已经尝试过global个变量,但这也不起作用。

非常感谢任何有关如何设置此事的建议。

0 个答案:

没有答案