it-swarm.com.de

Erstellen Sie nicht aktivierte Benutzer in Code, WordPress

Ich mache eine Site in WordPress und brauche Hilfe.
Ich habe ein benutzerdefiniertes Registrierungsformular, in dem Benutzer sich anmelden und spezielle Rollen erhalten können, aber ich möchte die Benutzer in der Datenbank als nicht aktiviert speichern, damit der Administrator sie über ein Plugin aktiviert. Das Problem ist, dass der verwendete Code den Benutzer sofort in der Datenbank speichert und das Konto verwendet werden kann.

Irgendwelche Ideen, wie man einen neuen Benutzer als nicht aktiviert erstellt?

$newUser = wp_create_user($un, $pw, $em);    
        if (!$newUser || is_wp_error($newUser)) {       
            $error = "[:en]Please fill in all fields.[:it]Please fill in all fields.";
        } else {
            $userinfo = array('ID'=>$newUser, 'first_name' => $fn, 'last_name' => $ln);   
            wp_update_user($userinfo);
            update_usermeta($newUser, 'company', $co);
            $user = new WP_User($newUser);
            $user->remove_role('subscriber');
            $user->add_role($tp);
            $success = "[:en]Your registration has been submitted for approval.[:it]Your registration has been submitted for approval.";
            wp_new_user_notification($newUser, $pw);
        }
2
Olsi

Wordpress hat keine Aktivierungs-/Deaktivierungsfunktion von der Box
Dies funktionierte für mich, um Benutzer mit zusätzlichen Daten zu erstellen.

wp_insert_user(array(
        'user_login' => $username,
        'user_pass' => $password,
        'user_email' => $email,
        'wp_user_level' => $role,
        'show_admin_bar_front' => 'false' //you probably won't want normal users to see the admin bar
    ));

http://codex.wordpress.org/Function_Reference/wp_insert_user
Versuchen Sie, eine temporäre Rolle ohne Rechte hinzuzufügen.

PS.
Wie ich sehe, versuchen Sie direkt, den Benutzer einzugeben, ohne zuvor Ihre Daten zu validieren.
Das ist nicht sehr sicher.

1
janw

Bei der Benutzererstellung sollten Sie in ein Datenbankfeld schreiben, dass das erstellte Konto nicht aktiviert ist.

Wenn beim Anmelden des Benutzers 0 (Konto nicht aktiviert) angezeigt wird, darf der Benutzer sich nicht anmelden. Wenn 1 (Konto aktiviert) angezeigt wird, können Sie mit dem Anmeldevorgang fortfahren.

Die Tabelle (sagen wir mal pending_accounts) sollte so aussehen:

user_id | activated
  1234  |     1
   42   |     0

Oder noch besser: Die aktivierten Konten könnten aus dieser Tabelle entfernt werden (pending_accounts), sodass Sie nur prüfen müssen, ob dort ein user_id vorhanden ist. Wenn dieser vorhanden ist, bedeutet dies, dass das Konto nicht von einem Administrator aktiviert wurde.

Wenn ein Administrator ein Konto aktiviert, wird der entsprechende Eintrag aus dem pending_accounts gelöscht.

Leider kenne ich die interne Struktur von WordPress und die Art und Weise, wie die Datenbank eingerichtet wird, nicht, aber es sollte einfach sein, eine Hilfstabelle (pending_accounts) zu erstellen.

0
Paul

Versuchen Sie, das usermetakey "user_status" auf 2 zu setzen. Ich denke, es ist irgendwie veraltet, aber Sie sollten es versuchen.

0
Bouchaala Sabri

Generell kann ich nur sagen, dass Sie dem Benutzer das Kennwort nicht sofort per E-Mail senden.

Die Funktion wp_new_user_notification ist plug-in-fähig. Wenn Sie also Ihrer Funktionsdatei oder einem Plug-in Folgendes hinzufügen, erhalten Administratoren weiterhin Benachrichtigungen über neue Benutzer, die Benutzer selbst jedoch nicht.

if ( !function_exists('wp_new_user_notification') ) :
/**
 * Notify the blog admin of a new user, normally via email.
 *
 * @since 2.0
 *
 * @param int $user_id User ID
 * @param string $plaintext_pass Optional. The user's plaintext password
 */
function wp_new_user_notification($user_id, $plaintext_pass = '') {
    $user = new WP_User($user_id);

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);

    // The blogname option is escaped with esc_html on the way into the database in sanitize_option
    // we want to reverse this for the plain text arena of emails.
    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

    $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

    @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

}
endif;

Der einzige Schritt, den Sie noch herausfinden müssen, ist, wie Sie Benutzer "aktivieren" (ihnen ihr Passwort senden). Abhängig von Ihrem Workflow zur Benutzergenehmigung können Sie eine Funktion erstellen, mit der das Kennwort eines Benutzers auf einen zufälligen Wert zurückgesetzt und per E-Mail an ihn gesendet wird. Sie können diese Funktion dann mit einer Schaltfläche auf dem Bildschirm für Benutzerlisten verknüpfen.

Der Nachteil dieses gesamten Ansatzes besteht darin, dass schwer zu erkennen ist, welche Benutzer "inaktiv" sind (ihnen wurde noch kein Kennwort per E-Mail gesendet). Dazu könnten Sie auf die Benutzeroption default_password_nag oder auf eine benutzerdefinierte Benutzeroption antworten, die Sie bei der Registrierung festgelegt haben.

0
MathSmath