我正在使用https://wordpress.org/plugins/wp-session-manager/插件,如果我只是设置并获取变量,它就可以工作。 (所以实际的会话管理工作)
我想要的是在ajax调用和“浏览器的正常请求”之间交换会话数据。这甚至可能吗?
的functions.php
add_action( 'wp_ajax_nopriv_set_formvalues', array ('FormHandler', 'set_formvalues') );
add_action( 'wp_ajax_set_formvalues', array ('FormHandler', 'set_formvalues') );
//Use of Plugin WP Session manager (so we can use sessions for storing current form values)
//(do this with ajax before submitting the form)
global $wp_session;
$wp_session = WP_Session::get_instance();
$formhandler = new FormHandler();
class FormHandler {
public function get_current_formvalues() {
return $wp_session['formvalues'];
}
public function set_formvalues() {
//Default values for form
$formvalues = array('name' => '',
'address' => '',
'plz' => '',
'city' => '',
'phone' => '',
'fax' => '',
'contactfirstname' => '',
'contactlastname' => '',
'contactanrede' => '',
'email' => '',
'contactphone' => '',
'recall' => '',
'newsletter' => '',
'messageText' => '');
//Change values in formvalues-array if values are posted
foreach($formvalues as $key => $value) {
if (isset($_POST[$key])) {
$formvalues[$key] = $_POST[$key];
}
}
$wp_session['formvalues'] = $formvalues;
echo json_encode( $wp_session );
die(); //Needed for wordpress ajax
}
public function __construct() {
$formvalues = $this->get_current_formvalues();
echo $formvalues //doesn't echo out nothing
}
}
$n = new FormHandler(); //doesn't echo out anything
等...
从javascript我通过ajax调用set_formvalues()
并正确返回值(作为json)。
我必须将表单提交到另一个域,但在我必须以某种方式保存formvalues之前,因为我发布的域重定向了我的页面,但只有状态代码。我的想法是我可以通过ajax发送这些formvalues,然后在下次访问我的页面时获取它们,这样如果用户犯了一个错误,访问者将不必填写所有值。
是否可以在ajax-calls和普通请求之间进行交换,然后我将如何实现呢? unfornutenaly我必须忍受“来自其他服务器的重定向解决方案”。也许这是可能的但是我做错了什么呢?有什么想法吗?
更新 即使我使用全局变量,我也不满意。它真的不喜欢全局,但我以前想不到这样做的方法,但现在我有一个解决方案,如果有人偶然遇到类似的问题,我认为我想与你分享:
class FormHandler {
private $wp_session = null; //Use of Plugin WP Session manger, so we can handle sessions
public function get_current_formvalues() {
return $this->wp_session['formvalues'];
}
public function set_formvalues() {
if ($this->wp_session === null) {
$this->wp_session = WP_Session::get_instance();
}
//set $formvalues based on posted fields...
$this->wp_session['formvalues'] = $formvalues;
echo json_encode( $this->wp_session );
die(); //Needed for wordpress ajax
}
public function __construct() {
//This makes it possible to use $this within function set_formvalue when using ajax in Wordpress
add_action( 'wp_ajax_nopriv_set_formvalues', array ( $this, 'set_formvalues') );
add_action( 'wp_ajax_set_formvalues', array ($this, 'set_formvalues') );
$this->wp_session = WP_Session::get_instance();
}
public function display_contactform() {
$formvalues = $this->get_current_formvalues();
}
}
答案 0 :(得分:4)
全局关键字应位于您要使用它的函数内部,如下所示:
public function get_current_formvalues() {
global $wp_session;
return $wp_session['formvalues'];
}
并将其添加到set方法
中 public function set_formvalues() {
global $wp_session;
//Default values for form
当前编写的方式,$wp_session
在调用时无法使用。
您可以在http://php.net/manual/en/language.variables.scope.php