仅使用用户名

时间:2015-07-30 02:09:14

标签: php wordpress-plugin wordpress-theming wordpress

我在同一台服务器上运行了2个脚本:proXcore(根目录)和wordpress(子目录)。

我需要做的是:当用户登录proXcore时,用户会自动登录到wordpress。 注销也是如此。

当用户登录proXcore时,它确实会创建一个带有用户名的$_SESSION['username']变量。 所以我利用这个来尝试完成我需要的东西。 到目前为止,我在我的functions.php中的wordpress主题是:

function custom_login_wp_and_pxc() {

    // GET USER INFO. WE NEED THE ID!   
    $user = get_user_by( 'login', $_SESSION['username'] );

    // SET THE COOKIE!
    wp_set_auth_cookie( $user->ID, false, '' );

    // USER NEEDS TO RELOAD THE PAGE 2 TIMES
    // WE NEED TO FIND A FIX FOR THIS       
    // WE TRY THIS BUT IT DID NOT REDIRECTED PROPERLY
    //wp_redirect( home_url() );
    //exit;
}

// IF SESSION[USERNAME] EXISTS, THEN IT MEANS IT IS LOGGED IN INTO PROXCORE, 
// THEREFORE, LOG THE USER INTO WORDPRESS
if( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) ){
    // run it before the headers and cookies are sent
    add_action( 'after_setup_theme', 'custom_login_wp_and_pxc' );
}   
// IF SESSION[USERNAME] DOES NOT EXISTS, THEN IT MEANS IT IS NOT LOGGED IN INTO PROXCORE, 
// THEREFORE, LOG OUT THE USER FROM WORDPRESS
else {
    wp_logout();
}

它正在工作但有一点小故障。 如果我签到proxcore,然后我访问wordpress,我最初没有登录,我需要访问其他页面或wordpress的帖子。就在这时,我发现自己已经登录了。

我需要用户在第一次登陆访问时登录,而无需点击其他地方以使身份验证生效。

我希望我有道理。

这是我在这里使用的正确代码吗? 将此代码放在主题的functions.php中是否正确? 还有另一种方法可以实现这个目标吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

after_setup_theme挂钩在WordPress对用户进行身份验证之前运行,因此您可能过早地设置了auth cookie。如何将其改为:

add_action( 'init', 'custom_login_wp_and_pxc' );

这将在WordPress创建用户并尝试进行身份验证后运行。

答案 1 :(得分:0)

我做到了!

我发布了代码,如果有人需要的话。

感谢大家的帮助和建议,因为你启发我找到解决方案。

function custom_login_wp_and_pxc() {

    if( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) )
        $session_username = $_SESSION['username'];          
    elseif ( isset( $_SESSION['adminusername'] ) and !empty( $_SESSION['adminusername'] ) )
        $session_username = $_SESSION['adminusername'];

    // GET USER INFO. WE NEED THE ID!   
    $user = get_user_by( 'login', $session_username );

    // SET THE COOKIE!
    wp_set_auth_cookie( $user->ID, false, '' );
}

// IF SESSION[USERNAME] EXISTS, THEN IT MEANS IT IS LOGGED IN INTO PROXCORE, 
// THEREFORE, LOG THE USER INTO WORDPRESS
if( ( isset( $_SESSION['username'] ) and !empty( $_SESSION['username'] ) )
    or ( isset( $_SESSION['adminusername'] ) and !empty( $_SESSION['adminusername'] ) ) ){

    if(!is_user_logged_in()){   
        add_action( 'after_setup_theme', 'custom_login_wp_and_pxc' );
        wp_redirect( home_url() );
    }

}   
// IF SESSION[USERNAME] DOES NOT EXISTS, THEN IT MEANS IT IS NOT LOGGED IN INTO PROXCORE, 
// THEREFORE, LOG OUT THE USER FROM WORDPRESS
else {          
    wp_logout();

    if(is_user_logged_in())
        wp_redirect( home_url() );  
}