[英]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.