2015-10-04 167 views
1

我在插件內部使用wp_signon,並在短代碼函數內部登錄用戶。爲了澄清,短代碼正在從頁面內容中調用。 wp_signon函數成功返回用戶信息。但is_user_logged_in()返回false。爲什麼發生這種情況,或者我如何設置is_user_logged_in()爲true,以便用戶保持登錄狀態?如何在Wordpress中設置is_user_logged_in()true

  ob_start(); 
      $user_data = array(); 
      $user_data['user_login'] = $username; 
      $user_data['user_password'] = $password; 
      $user_data['remember'] = $remember; 
      $user = wp_signon($user_data, false); 
       ob_get_clean(); 
      if (is_wp_error($user)) { 
       $err = $user->get_error_message(); 

      } else { 


       $_SESSION['fc_user']=$user->ID; 
       var_dump($user); // gives the user info 
       var_dump(is_user_logged_in()); // gives false 

      } 
+0

您的意思是用戶不能在您的網站上保持登錄狀態? $記住如果你想在這個網站上玩遊戲,那麼你需要記住。如果您的會話中沒有任何數據,is_user_logged_in()將不起作用。 wp_signon()將處理你的會話。但爲什麼在其他情況下你設置$ _SESSION ['fc_user']?你開始會議了嗎? –

+0

@Faysal是的,我確實使用session_start()開始了會話。 – Nafis

+0

@FaysalHaque,我不明白你的意思是「$記憶需要真實」。但我試着用wp_signon($ user_data,true);以及。它仍然沒有工作。 – Nafis

回答

1

功能wp_signon

發送標題的頁面。它必須在任何內容返回之前運行。

因此,一個簡碼內部運行它(如您在您的評論指定)是爲時已晚:頭部已經發送。

爲了達到你想要什麼,你應該將你的代碼兩個部分,在不同的時間來運行,這樣的事:

add_action('after_setup_theme', function() { 

    // run this only on the page you want 
    if(!is_page('the_page_you_want')) 
     return; 

    $user_data = array(); 
    $user_data['user_login'] = $username; 
    $user_data['user_password'] = $password; 
    $user_data['remember'] = $remember; 
    $user = wp_signon($user_data, false); 
    if (is_wp_error($user)) { 
     $GLOBALS['user_error_message'] = $user->get_error_message(); 
    } else { 
     $_SESSION['fc_user'] = $user->ID; 
    } 

}); 


add_shortcode('your_shortcode', function($atts) { 

    if(is_user_logged_in()) { 
     // get user info 
     return print_r(get_userdata(get_current_user_id()), 1); 
    } elseif(isset($GLOBALS['user_error_message'])) { 
     // show error 
     return print_r($GLOBALS['user_error_message'], 1); 
    } 

}); 
0

我只是碰到了類似的問題與MVC WordPress插件。 對我來說,解決方案是包含

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-includes/pluggable.php'); 

有通過插件訪問的核心功能。

+0

這只是一個假設,可能是完全錯誤的。如果WordPress的核心文件在服務器的文檔根目錄中不是**,那該怎麼辦? –

相關問題