所以我用Google搜索并将自己读成死亡,无法找到解决此问题的方法。
我使用WP Session Manager plugin来使用会话数据。我们需要一个非常具体的社交登录和注册流程。我们在www.domain.com上有一个Wordpress网站(版本4.2.1),我们的网络应用程序位于app.domain.com。现在,如果您在WP站点上登录或注册,您将在应用程序(而非WP站点)上登录/注册。
我为此编写了一个自定义插件,因为那里的选项无法满足我的需求。
我的问题在于访问函数之间的会话数据。我的流程如下(以Google为例):
用户点击Google+登录信息,弹出Google身份验证弹出窗口,用户授予权限,回拨网址为www.domain.com/google_callback
。页面google_callback
有一个名为google_callback
的短代码,然后调用该函数。该功能中的所有内容都有效,我可以正确地获取数据。由于剥离了所有Google数据处理功能,该功能如下所示:
// social.php plugin file
function google_callback() {
$wp_session = WP_Session::get_instance();
// Get Google data all happens here...
$user['name'] = $userObj->givenName;
$user['surname'] = $userObj->familyName;
$user['email'] = $userObj->email;
$user['verified'] = $userObj->verifiedEmail;
$wp_session['registeruser'] = $user;
$wp_session['registertype'] = 'Google';
wp_redirect(home_url('social-register'));
}
现在,如果我var_dump($wp_session);
之前wp_redirect
,我会正确获取所有Google数据。
social-register
页面有一个短代码,用于构建表单并使用检索到的数据预先填充表单。这就是这个功能:
// theme functions.php file
function build_registerform($args,$content=null) {
$wp_session = WP_Session::get_instance();
var_dump($wp_session);
}
在此var_dump
,$wp_sessio
n为空WP_Session object
。
我尝试将所有$wp_session = WP_Session::get_instance();
更改为global $wp_session
但没有运气。
有谁知道我做错了什么?
答案 0 :(得分:1)
我认为在你的social.php 中你首先必须让$ wp_session全局支持任何功能。因此在包含脚本之后,在social.php的顶部。添加这个
global $wp_session = WP_Session::get_instance();
稍后在google_callback函数中使用
global $wp_session;
同样在你的主题functions.php
中function build_registerform($args,$content=null) {
global $wp_session;
var_dump($wp_session); //session is empty right now
}
答案 1 :(得分:0)
尝试检查会话管理器插件是否正常工作。
激活您的插件并将此代码添加到functions.php
文件
function test_session () {
global $wp_session;
$wp_session = WP_Session::get_instance();
}
add_action( 'init', 'test_session' );
然后在header.php
文件中添加此代码
<?php
global $wp_session;
$wp_session['test'] = "test";
var_dump($wp_session);
?>