[英]How to set is_user_logged_in() true in Wordpress
我從插件內部和wp_signon
函數內部使用wp_signon
登錄用戶。 為了澄清起見,短代碼是從頁面內容中調用的。 wp_signon
函數成功返回用戶信息。 但是is_user_logged_in()
返回false 。 為什么會發生這種情況,或者如何將is_user_logged_in()
設置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
}
將標題發送到頁面。 它必須在返回任何內容之前運行。
因此,在簡碼中運行它(如您在注釋中指定的那樣)為時已晚:標頭已經發送。
為了實現所需的功能,應將代碼分為兩部分,以便在不同的時間運行,如下所示:
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 );
}
} );
我只是遇到了MVC Wordpress插件的類似問題。 對我來說,解決方案是包括
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-includes/pluggable.php');
通過插件訪問核心功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.