我现在用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: Test
,Email: 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
个变量,但这也不起作用。
非常感谢任何有关如何设置此事的建议。