Wie kann man on hook profil_update Benutzerregistrierung, Benutzer zurücksetzen Passwort oder Benutzer aktualisieren Profil zu unterscheiden?

Der Haken

profile_update 

wird ausgetriggers, wenn der Benutzer sein Profil aktualisiert, das heißt auch, wenn er das erste Mal sein Passwort nach der Registrierung und bei der Registrierung zurücksetzt.

Wie unterscheide ich zwischen den drei Fällen?

EDIT: Es gibt mindestens 3 Fälle zu unterscheiden, in denen dieser Hook aufgerufen wird.

  1. Benutzer ersten Registrierungsschritt
    • Der Benutzer füllt E-Mail und Benutzernamen und speichert (profile_update wird hier aufgerufen) und erhält die Anfrage, die E-Mail für den Verifizierungsprozess zu überprüfen
  2. User-Reset-Passwort nach der Registrierung
    • Der Benutzer überprüft seine E-Mails, folgt der vorgeschlagenen URL, setzt das Passwort zurück und speichert (profile_update wird hier aufgerufen)
  3. Benutzer aktualisiert sein Profil
    • Der Benutzer loggt sich ein und aktualisiert einige Daten in seinem Profil und speichert (profile_update wird hier aufgerufen)

Ich denke, es ist möglich, Fall 3 zu unterscheiden und zu überprüfen, ob jemand, der gerade angemeldet ist, anruft

 is_user_logged_in() 

Dennoch besteht das Problem, Fall 2 von 1 zu unterscheiden. Wie s_ha_dum zeigt, gibt es die Möglichkeit, den user_activation_key zu überprüfen. Wenn der Schlüssel nicht zur Zeit 1 sondern zu einer Zeit 2 erzeugt wird, sind die 3 Fälle unterscheidbar. (Auch wenn ich persönlich glaube, der Haken deckt zu viele Fälle und sollte nicht).

Solutions Collecting From Web of "Wie kann man on hook profil_update Benutzerregistrierung, Benutzer zurücksetzen Passwort oder Benutzer aktualisieren Profil zu unterscheiden?"

Technisch können Sie nicht. Dieser Filter gibt keine Daten weiter, die es Ihnen ermöglichen, zwischen diesen beiden Fällen zu unterscheiden.

 2086 /** 2087 * Fires immediately after an existing user is updated. 2088 * 2089 * @since 2.0.0 2090 * 2091 * @param int $user_id User ID. 2092 * @param object $old_user_data Object containing user's data prior to update. 2093 */ 2094 do_action( 'profile_update', $user_id, $old_user_data ); 

Sie stellen fest, dass der Filter $old_user_data sodass Sie den user_activation_key in der Tabelle *_users überprüfen können. Das sollte dich näher bringen, aber ich denke, dass dieses Feld ausgefüllt wird, wenn ein Benutzer das Passwort zurücksetzt und nicht nur, wenn das Konto erstellt wird.

Um absolut sicher zu gehen, müssen Sie wahrscheinlich beim ersten Login einen Benutzer-Meta-Wert festlegen und dann das für nachfolgende Logins überprüfen.

Um Fall 1 und 3 zu unterscheiden, habe ich tatsächlich verwendet:

 add_action( 'profile_update', 'when_profile_update', 10, 2 ); function when_profile_update( $user_id, $old_user_data ) { if (is_user_logged_in()) { // Updating profile info when logged in }else{ if (empty($old_user_data->user_activation_key)) { // Registering } } } 

Zu diesem Zeitpunkt wird in meiner Site profile_update nicht für das Zurücksetzen des Kennworts ausgetriggers, daher wird Fall 2 nicht ausgeführt.