WordPress Auto Login nach Registrierung funktioniert nicht

Also habe ich eine Reihe von Threads nachgeschlagen, um herauszufinden, wie man einen Benutzer nach der Registrierung automatisch anmeldet, und kam auf diese Idee.

function log_me_the_f_in( $user_id ) { $user = get_user_by('id',$user_id); $username = $user->user_nicename; $user_id = $user->ID; wp_set_current_user($user_id, $username); wp_set_auth_cookie($user_id); do_action('wp_login', $username, $user); exit; } add_action( 'user_register', 'log_me_the_f_in' ); 

Laut vielen Antworten, die ich gesehen habe, sollten wp_set_auth_cookie und wp_set_current_user alleine ausreichen, um einen Benutzer per ID wp_set_current_user , aber selbst das tut nichts.

Hat jemand eine Idee, was ich falsch mache?

Solutions Collecting From Web of "WordPress Auto Login nach Registrierung funktioniert nicht"

Ich registriere Benutzer mit einem benutzerdefinierten Registrierungsformular, das zu wp-login.php verweist

Dann könnten wp_signon function wp_signon verwenden. Geben Sie weitere Details an, um eine andere Lösung vorzuschlagen.

Ich registriere Benutzer mit einem benutzerdefinierten Registrierungsformular, das zu wp-login.php . Könnte es das sein?

Probieren Sie eine dieser functionen aus. Sie können auswählen, auf welche Seite in der ersten Seite umgeleitet werden soll. Der zweite ist mehr wie der, den du versuchst. Sie können arbeiten oder helfen.

 add_action( 'tml_new_user_registered', 'tml_new_user_registered' ); function tml_new_user_registered( $user_id ) { wp_set_auth_cookie( $user_id, false, is_ssl() ); wp_redirect( admin_url( 'profile.php' ) ); exit; } 

oder

 add_action( 'wpmem_post_register_data', 'my_registration_hook', 1 ); function my_registration_hook( $fields ) { $user_login = $fields['username']; $user_id = $fields['ID']; wp_set_current_user( $user_id ); wp_set_auth_cookie( $user_login ); do_action( 'wp_login', $user_login ); wp_set_current_user( $fields['ID'] ); } 

Kurze Antwort – Ihre ursprüngliche function (meistens) funktioniert. Dies ist Ihre function, die bearbeitet wird, um zu tun, was sie tun muss:

 function log_me_the_f_in( $user_id ) { wp_set_current_user( $user_id ); wp_set_auth_cookie( $user_id ); wp_redirect( home_url( '/some-ending-page/' ) ); exit(); } add_action( 'user_register', 'log_me_the_f_in' ); 

Lange Antwort – hier ist eine Erklärung, warum dies die Antwort ist.

Der Vorschlag von wp_signon() wird es nicht tun. Sie benötigen dazu die Benutzeranmeldeinformationen, und wenn keine Zugangsdaten übergeben werden, versucht diese function, den geposteten Benutzernamen (‘log’) und das Passwort (‘pwd’) aus dem Formular abzurufen, und ich würde annehmen, dass ‘pwd’ dafür fehlen würde.

Die anderen Antworten machen Vorschläge, die leider nicht zutreffen. Als Entwickler von WP-Mitgliedern, so gerne ich dieses Plugin benutzen möchte, macht es keinen Sinn, wpmem_post_register_data zu verwenden, wenn Sie keine WP-Mitglieder verwenden.

Verwenden Sie wp_set_current_user() als Ihren ursprünglichen Gedanken ist der richtige Weg, es zu tun; Sie müssen den Benutzer jedoch am Ende redirect, damit er als angemeldet angezeigt wird.

Die Aktion user_register übergibt die ID des gerade registrierten Benutzers. Daher bin ich nicht sicher, warum Sie den Wert von $user_id ändern würden, indem Sie ihn auf $user->ID wenn Sie den Wert bereits haben. Und der einzige Grund, den ich sehen kann, um das Benutzerobjekt zu erhalten, ist, den Benutzernamen zu erhalten, der ein optionales Argument für wp_set_current_user() und die wp_login Aktion ist, damit ich mich nicht einmal darum wp_login würde. (Ich würde die wp_login Aktion abbrechen, weil alles, was tut, einen Haken in Ihren process für externe functionen zu haken ist. Ob Sie dies benötigen / brauchen, erfordert mehr Informationen als Ihr OP bietet.) All das ist nur verschwendet Bits in Ihrem Code, IMO.

Beendet Ihr Registrierungsprozess an diesem Punkt? Der Authentifizierungs-Cookie ist gesetzt und der Benutzer ist eingeloggt. Dies wird jedoch erst bei der nächsten Seitenanforderung gelesen, so dass Sie den Benutzer auf die Seite redirect müssen, auf der er mit wp_redirect() enden soll exit() .

Sie müssen diesen Code ausführen, bevor Header an den Client gesendet werden. Versuchen Sie, den Login-Code zu trennen.

Diese Frage ist fast ein Jahr alt, also lassen Sie uns bitte wissen, was, wenn etwas funktioniert.

Das funktioniert für mich. Ich benutze WP-Member Plugin (und Hook).

 add_action( 'wpmem_post_register_data', 'my_registration_hook', 1 ); function my_registration_hook( $fields ) { wp_set_current_user( $fields['ID'] ); $creds = array( 'user_login' => $fields['username'], 'user_password' => $fields['password'], 'rememember' => false ); wp_signon( $creds, false ); }