web-dev-qa-db-fra.com

Créer un utilisateur non activé dans le code, wordpress

Je fais un site sur WordPress et j'ai besoin d'aide.
J'ai un formulaire d'inscription personnalisé dans lequel les utilisateurs peuvent s'inscrire et obtenir des rôles spéciaux, mais je veux enregistrer les utilisateurs dans la base de données car ils ne sont pas activés pour que l'administrateur les active via un plugin. Le problème est que le code que j'utilise, enregistre simplement l'utilisateur dans la base de données immédiatement et le compte est utilisable.

Des idées sur la façon de créer un nouvel utilisateur comme non activé?

$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 n'a pas de fonction active/désactivation en dehors de box
Cela m'a permis de créer des utilisateurs avec des données supplémentaires.

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
Essayez d’ajouter un rôle temporaire sans aucun droit.

PS.
Je vois que vous essayez directement d’insérer l’utilisateur sans valider d’abord vos données.
Ce n'est pas très sûr.

1
janw

Lors de la création de l'utilisateur, vous devez écrire dans un champ de base de données le fait que le compte créé n'est pas activé.

Ensuite, lors de la connexion de l'utilisateur, vous devez vérifier ce champ. S'il indique 0 (compte non activé), vous ne devez pas laisser l'utilisateur se connecter. Sinon, s'il indique 1 (compte activé), vous pouvez poursuivre le processus de connexion.

La table (disons pending_accounts) devrait ressembler à ceci:

user_id | activated
  1234  |     1
   42   |     0

Ou encore mieux: les comptes activés peuvent être supprimés de cette table (pending_accounts), il vous suffira donc de vérifier si un user_id existe, ce qui signifie que le compte n'a pas été activé par un administrateur.

Lorsqu'un administrateur active un compte, l'entrée correspondante du pending_accounts est supprimée.

Malheureusement, je ne connais pas la structure interne de wordpress ni la manière dont elle configure la base de données, mais il devrait être facile de créer une table auxiliaire (pending_accounts).

0
Paul

Essayez de mettre "user_status" sur usermetakey à 2. Je pense que c'est en quelque sorte obsolète, mais vous devriez l'essayer.

0
Bouchaala Sabri

En règle générale, je dirais simplement de ne pas envoyer par courrier électronique à l'utilisateur son mot de passe immédiatement.

La fonction wp_new_user_notification est connectable. Par conséquent, si vous ajoutez un élément similaire à ce qui suit dans votre fichier de fonctions ou dans un plug-in, les administrateurs recevront toujours les nouvelles notifications des utilisateurs, mais pas les utilisateurs eux-mêmes.

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;

La seule chose à faire est de savoir comment "activer" les utilisateurs (leur envoyer leur mot de passe). En fonction de votre flux de travail d'approbation utilisateur, vous pouvez créer une fonction qui réinitialise le mot de passe d'un utilisateur sur une valeur aléatoire et le lui envoie par courrier électronique. Vous pouvez ensuite associer cette fonction à un bouton de l'écran des listes d'utilisateurs.

L'inconvénient de cette approche est qu'il est difficile de savoir quels utilisateurs sont "inactifs" (aucun mot de passe n'a encore été envoyé par courrier électronique). Pour cela, vous pouvez répondre à l'option d'utilisateur default_password_nag, ou à une option d'utilisateur personnalisée que vous avez définie lors de l'enregistrement, je suppose.

0
MathSmath