如何在Wordpress中设置is_user_logged_in()true

时间:2015-10-04 15:09:10

标签: php wordpress login

我在插件内部和短代码函数中使用wp_signon来登录用户。为了澄清,从页面内容调用短代码。 wp_signon函数成功返回用户信息。但is_user_logged_in()正在返回 false 。为什么会发生这种情况或如何设置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

            }

2 个答案:

答案 0 :(得分: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 );
    }

} );

答案 1 :(得分:0)

我刚刚遇到类似的MVC Wordpress插件问题。 对我来说,解决方案是包括

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

通过插件访问核心功能。