2015-05-05 62 views
1

所以我已经谷歌搜索并且自我阅读死亡,并且找不到解决这个问题的方法。WP_Session插件不能正常工作

我正在使用WP Session Manager plugin来使用会话数据。我们需要一个非常具体的社交登录和注册流程。我们在www.domain.com上有一个Wordpress网站(版本4.2.1),我们的网络应用程序位于app.domain.com。现在,如果您在WP网站上登录或注册,则会在应用程序(而非WP网站)上登录/注册。

我正在为此编写一个自定义插件,因为那里的选项没有满足我的需求。

我的问题来访问功能之间的会话数据。我的流程如下(以谷歌为例):

用户点击Google+登录,弹出Google身份验证弹出窗口,用户提供权限,回拨URL为www.domain.com/google_callback。页面google_callback有一个称为google_callback的短代码,然后调用该函数。该功能中的所有功能都能正常工作,并将数据正确地恢复。与所有的谷歌数据处理剥离,该函数是这样的:

// 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之前,我正确地得到所有的谷歌的数据。

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 
} 
+0

仍然没有运气。我已经尝试过你说的,但得到一个空的物体。 – Albert

+0

我认为functions.php可能具有更高的优先级,并在插件文件之前调用。如何直接在soclal.php –

+0

中直接添加build_registerform你觉得这个工作吗?每次获得时都是空对象,'global $ wp_session = WP_Session :: get_instance();'显示语法错误! –

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); 
?> 
+0

也无法正常工作。 – Albert

+0

我已经编辑了会话插件测试的答案,检查它 – tzafar