WordPress – So melden Sie Benutzer programmgesteuert am Frontend an

Lesezeit: 2 Minuten

Alens Benutzeravatar
Alen

Ich habe anhand dieses Beispiels eine Funktion zum Anmelden von Benutzern am Frontend erstellt: https://gist.github.com/iandunn/8162246

Nachdem sich der Benutzer angemeldet hat is_user_logged_in() Funktion zurück true nur innerhalb dieser Funktion, wo ich den Code für den Anmeldeteil platziert habe.

Wie melde ich Benutzer global an? Das ist mein Code:

function programmatic_login( $username ) {
    if ( is_user_logged_in() ) {
        wp_logout();
    }
    add_filter( 'authenticate', 'allow_programmatic_login', 10, 3 );
    $user = wp_signon( array( 'user_login' => $username ) );
    remove_filter( 'authenticate', 'allow_programmatic_login', 10, 3 );
    if ( is_a( $user, 'WP_User' ) ) {
        $user_id = $user->ID;

        if( $user ) {
            wp_set_current_user( $user_id, $user->user_login );
            wp_set_auth_cookie( $user_id );
            do_action( 'wp_login', $user->user_login );
        }
        if ( is_user_logged_in() ) {
            return true;
        }
    }

    return false;
}

function allow_programmatic_login( $user, $username, $password ) {
    return get_user_by( 'login', $username );
}

function process_login(){

    // this comes from login form
    $username = $_POST["login_username"];

    programmatic_login( $username );

    // it returns true only here, on any other function it returns false
    if(is_user_logged_in()){
        echo "ok";
    }else{
        echo "not ok";
    }

}

Dies ist ein Beispiel, bei dem ich versuche zu überprüfen, ob der Benutzer außerhalb der vorherigen Funktion angemeldet ist:

add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);

function add_login_logout_link($items, $args) {

    $loginPage = get_page_by_title("Login");
    $registerPage = get_page_by_title("Register");

    if(is_user_logged_in()){
        $items .= "<li><a href="" . wp_logout_url("index.php') . "' title="Logout">Logout</a></li>";
    }else{
        $items .= "<li><a href="". site_url() . "https://stackoverflow.com/" . '?page_id=' . $loginPage->ID ."'>Login</a></li><li><a a href="". site_url() . "https://stackoverflow.com/" . '?page_id=' . $registerPage->ID ."'>Register</a></li>";
    }

    return $items;
}

Auf Kodex wp_set_aktueller_Benutzer Es gibt ein Beispiel, um den aktuellen Benutzer festzulegen und sich anzumelden.

$user_id = 12345;
$user = get_user_by( 'id', $user_id ); 
if( $user ) {
    wp_set_current_user( $user_id, $user->user_login );
    wp_set_auth_cookie( $user_id );
    do_action( 'wp_login', $user->user_login );
}

Die einfachste Lösung ist die Verwendung von wp_login_form(), siehe Referenz: http://codex.wordpress.org/Function_Reference/wp_login_form
Wenn ich das richtig verstehe, sollte dies alles behandeln, was Sie wollen. Dies setzt das Auth-Cookie und kann auf die gewünschte Seite umleiten, der Login funktioniert global

  • Das war so einfach. Vielen Dank

    – Alen

    15. März 2015 um 16:51 Uhr

1437820cookie-checkWordPress – So melden Sie Benutzer programmgesteuert am Frontend an

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy