簡體   English   中英

如何在Wordpress中將is_user_logged_in()設置為true

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

            }

函數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 );
    }

} );

我只是遇到了MVC Wordpress插件的類似問題。 對我來說,解決方案是包括

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

通過插件訪問核心功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM