2015-05-05 94 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