it-swarm.com.de

Benutzer nach der Registrierung zur Vervollständigung ihres Profils zwingen? Wie man

Ich erstelle eine benutzerdefinierte (Schnell-) Registrierungsseite auf meiner WordPress-Site, damit Benutzer sich schnell registrieren können, indem sie nur die E-Mail-Adresse mit dem Benutzernamen eingeben und ihr Passwort auswählen.

Ich habe tpl-edit-profile.php,

was ich erreichen muss, ist, Benutzer umzuleiten, nachdem sie sich auf dieser Seite registriert haben (tpl-edit-profile.php)

Für die Registrierung sollte keine Aktivierung erforderlich sein.

Anschließend müssen die Benutzer alle Profildaten ausfüllen und vervollständigen, bevor sie zur restlichen Site weitergeleitet werden können. Mit anderen Worten, wenn sie keine Profilinformationen vervollständigen, können sie die Site nicht weiter nutzen, sodass alle Aktionen beim tpl-edit-profile.php bleiben. Wenn sie die Profilinformationen vervollständigen, können sie auf die gesamte Website zugreifen und diese nutzen.

Vielen Dank.

3
fritids

Sie sollten sich in die Aktion user_register einhängen.

Ich habe kürzlich auf einer Website etwas Ähnliches gemacht (ohne Profilfelder ausfüllen zu müssen, aber ohne eine Mitgliedschaft erneuern zu müssen).

Ich werde eine mehrteilige Lösung vorschlagen (lassen Sie mich wissen, wenn etwas verwirrend ist, es war ein langer Tag und ich erkläre es möglicherweise nicht perfekt).

BEARBEITEN: Wenn Sie weiter darüber nachdenken, empfehle ich Ihnen, diese PHP -Datei in eine Vorlage umzuwandeln und sie auch als Seite festzulegen. Dies erleichtert es Wordpress, Benutzer dorthin umzuleiten. (Nehmen wir an, Sie haben den folgenden Code auf/registration-step-2/gesetzt.)

Fügen Sie zunächst eine Aktion in den Hook user_register ein, in dem Sie mit wp_redirect umleiten ([URL der Profilbearbeitungsseite hier einfügen]).

So etwas wie:

//run this when a new user registers
add_action('user_register','continue_to_registration');
//redirects user to registration form
function continue_to_registration() {
     wp_redirect(get_option('siteurl') . '/registration-step-2/');
     exit();
}

Zweitens, wenn ein Benutzer diese Registrierung beendet, eine benutzerdefinierte user_meta-Option festgelegt oder eine Benutzerfunktion hinzugefügt hat, wäre meine persönliche Präferenz hier eine Funktion, aber Sie könnten in beide Richtungen gehen. Auf diese Weise können Sie beim Anmelden überprüfen, ob der Benutzer die Registrierung abgeschlossen hat oder nicht.

Nehmen wir an, Sie haben eine Variable für Ihre Formularübermittlung mit dem Namen $ verify, die nach erfolgreicher Verarbeitung des Formulars auf true gesetzt wird.

Sie müssen dem verarbeitenden Teil Ihres Formulars zusätzlichen Code hinzufügen. So etwas wie:

//set user capability on finished registration
if($verified) {
     $user_id = get_current_user_id();
     $user = new WP_User($user_id);
     $user->add_cap('finished_registration');
}

Drittens müssen Sie sich in zwei Aktionen einklinken: wp_login (um zu überprüfen, ob der Benutzer, der sich anmeldet, über Ihre benutzerdefinierte Metaoption oder -funktion verfügt) und Sie möchten pre_get_posts wahrscheinlich eine ähnliche Prüfung hinzufügen (falls der Benutzer dies nicht getan hat) Die Registrierung ist noch nicht abgeschlossen. Sie werden aufgefordert, wann immer sie versuchen, irgendwohin zu navigieren.

So etwas wie:

//run this function when a user logs in
add_action('wp_login','check_reg');
//check if user has finished registration when logging in
function check_reg($login) {
     $user = get_userdatabylogin($login);
     if(!$user->has_cap('finished_registration')) {
          wp_redirect(get_option('siteurl') . '/registration-step-2/');
          exit();
     }
}

//run this function when a user tries to load a page
add_action('pre_get_posts','check_reg_on_page');
//check if user has finished registration before loading a page
function check_reg_on_page() {
     if(is_user_logged_in()) {
          if(!is_page('Registration Step 2') && !is_admin()) {
               $user_id = get_current_user_id();
               $user = new WP_User($user_id);
               if(!$user->has_cap('finished_registration')) {
                    wp_redirect(get_option('siteurl') . '/registration-step-2/');
                    exit();
               }
          }
     }
}

Stellen Sie sicher, dass die Aktion pre_get_posts, die Sie auf is_user_logged_in () überprüfen, Ihre benutzerdefinierte Metaoption oder -funktion enthält.

Ich kann versuchen, morgen im Büro Code bereitzustellen, aber wenn Sie mit WordPress-Aktionen einigermaßen vertraut sind, sollten Sie in Ordnung sein.

Außerdem würde ich als Randnotiz erwähnen, dass dies ein einfaches Funktions-Plug-In ist, damit Sie sich keine Sorgen machen müssen, wenn Sie später das Thema wechseln, um die Datei "functions.php" zu kopieren.

Aber um sicherzustellen, dass sie es tatsächlich ausfüllen, würde ich auch eine Benutzerfunktion oder eine benutzerdefinierte user_meta-Option festlegen, nachdem sie es ausgefüllt haben, damit Sie dem System mitteilen können, dass sie fertig sind.

BEARBEITEN: WENN Sie GravityForms verwenden, lassen Sie es mich wissen, weil Sie aufgrund der Reihenfolge, in der sie ausgelöst werden, möglicherweise eine andere Aktion ausführen möchten. Die Aktion "Schwerkraftformulare" "gform_user_registered" wird nach der Funktion "user_register" ausgelöst und enthält alle Daten des jeweiligen Formulars, an das Sie es anhängen. Auf diese Weise können Sie das Formular flexibler verarbeiten und Benutzer basierend auf dem Formular ändern.

EDIT 2: Ich habe Code hinzugefügt, um besser zu artikulieren, was ich sagte. Lassen Sie mich wissen, wenn Sie eine Klarstellung oder Erklärung benötigen. Es wird natürlich einige Anpassungen erfordern, um in Ihren Code zu passen, aber die von mir enthaltenen Funktionen sollten Ihnen gute Dienste leisten, wenn Sie nur den Seitennamen bei der Umleitung anpassen.

UPDATE VON FRITIDS:

//run this function when a user tries to load a page
 add_action('appthemes_before_header','check_reg_on_page'); // appthemes_before_header     built-in action hook for jobroller theme
//add_action('pre_get_posts','check_reg_on_page'); // causes redirections loop  error  with jobroller theme
//check if user has finished registration before loading a page
function check_reg_on_page() {
     if(is_user_logged_in()) {
      if(!is_page('Registration Step 2') && !current_user_can( 'administrator' ))       {//!is_admin() is not workin replaced by !current_user_can
           $user_id = get_current_user_id();
           $user = new WP_User($user_id);
            $redirect = get_option('siteurl') . '/registration-step-2/';
           if(!$user->has_cap('finished_registration')) {
                wp_safe_redirect($redirect);

              exit();


           }

      }

 }

}
5
Eric Allen