So passen Sie den Anmeldevorgang an

Ich möchte eine neue Art der Anmeldung erstellen.

Was ich jetzt tun muss:

  1. Bearbeiten Sie das Benutzerformular und fügen Sie ein neues Feld hinzu, das in user_meta gespeichert wird
  2. Bearbeiten Sie das Anmeldeformular und fügen Sie eine neue Eingabe hinzu.
  3. Erstellen Sie eine (sichere) Abfrage, die die Benutzer-ID in der Benutzermetatabelle auswählt;

Was ich noch brauche:

  1. Fangen Sie den Beitrag zur Anmeldung ab, führen Sie meine Abfrage aus (3) und akzeptieren Sie dies als gültigen Benutzer.

Ich könnte das tun, wenn ich die wp_signon function überschreiben wp_signon , aber das ist nicht möglich.

Eine andere Alternative?

Solutions Collecting From Web of "So passen Sie den Anmeldevorgang an"

Sie können diese function in functions.php Ihres aktuellen Themas verwenden. Es wird ein zusätzliches Feld im Anmeldeformular angezeigt

 ###################Code starts here ################### < ?php add_action('login_form', 'add_login_field'); function add_login_field() { ?> 

< ?php } function do_anything($user) { //do stuff $userdata= $user = get_userdatabylogin($user); $user_id = $userdata->ID; $my_name = $_POST['my_name']; add_user_meta( $user_id, 'my_name', $my_name); } add_action('wp_login', 'do_anything'); ?> ############## CODE ENDS HERE ###################

Der obige Code erstellt ein zusätzliches Feld im Anmeldeformular. Dieser Wert wird mit anderen Werten gepostet, die in der function ” do_anything($user) ” empfangen werden können. Abschließend kann dieser Wert als Benutzer-Meta gespeichert werden.

Teil 2 ================================================ ========================

 add_action('login_form', 'add_login_field'); function add_login_field() { ?> 

< ? } function do_anything($user) { //do stuff $userdata= $user = get_userdatabylogin($user); $user_id = $userdata->ID; $my_name = $_POST['my_name']; add_user_meta( $user_id, 'my_name', $my_name); } add_action('wp_login', 'do_anything'); add_filter('authenticate', 'check_login', 10, 3); function check_login($user, $username, $password) { global $wpdb; if(isset($_POST['my_name']) && trim($_POST['my_name'])!="") { $customfield = $_POST['my_name']; $UsermetaData = $wpdb->get_results("SELECT *FROM wp_usermeta WHERE meta_value='$customfield'"); $user = get_user_by('id', $UsermetaData[0]->user_id ); // Redirect URL // if ( !is_wp_error( $user ) ) { wp_clear_auth_cookie(); wp_set_current_user ( $user->ID ); wp_set_auth_cookie ( $user->ID ); $redirect_to = user_admin_url(); wp_safe_redirect( $redirect_to ); exit(); } return $user; } }

Bitte überprüfen Sie dieses Code-Snippet. Außerdem müssen Sie den Code gemäß den Anforderungen ändern. Stellen Sie sicher, dass das Feld “mein_name” eindeutig bleibt und nicht jedes Mal beim Anmelden aktualisiert wird.

Wenn Sie die Eingabe abfangen möchten, bevor die Anmeldung abgeschlossen ist, würde ich denken, dass Sie die Aktion wp_authenticate einfach haken und das Skript dort ausführen können.

“Diese Aktion befindet sich innerhalb von wp_signon. Im Gegensatz zur Aktion wp_login wird sie vor dem WordPress-Authentifizierungsprozess ausgeführt.”