[Résolu] compte “client” en attente / validation impossible (Créer un compte)

  • WordPress :5.5
  • Statut : résolu
2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #2370206
    remy_tandem
    Participant
    Initié WordPress
    2 contributions

    Bonjour,

    Ma configuration WP actuelle : WP 5.6.1

    • Version de PHP/MySQL : 7.1.32
    • Thème utilisé : personnel inconnu (probablement un mélange, beaucoup de fonction() issu de woocommerce et @Quark)
    • Extensions en place : woocommerce / woocommerce memberships
    • Nom de l’hébergeur : OVH
    • Adresse du site : tandem83.com

    Problème(s) rencontré(s) :

     

    Salut à toutes et tous,

     

    Je suis en train de terminer l’installation d’une page woocommerce (en combo avec l’extension membership afin de donner des accès restreints à certaines pages) sur notre site et je rencontre un problème que je ne parviens à solutionner.
    Le problème existe également lors que l’on veut uniquement s’enregistrer sur le site à partir de la page “mon compte”.

     

    Le user se rend sur le site et fait un achat en ligne.

    Lors de son achat, il rempli un formulaire afin de s’inscrire sur le site (dans ce cas, en tant que “client”).
    Quand l’achat est terminé, le user est correctement connecté à la plate-forme WordPress. Il peut gérer son compte et s’y déplacer sans aucun problème.

    S’il se déconnecte du compte et qu’il veut s’y reconnecter alors le message suivant apparaît:

     

    Compte en attente : Votre compte n’est pas actif actuellement. Un administrateur doit l’activer avant que vous ne puissiez vous connecter.

     

    Aucun mail de validation de compte n’est envoyé par défaut.
    J’ai donc récupéré une fonction qui est censée “faire le job” – sans succès.

     

    /* WOOCOMMERCE – account validation by user */
    // Rediriger l’utilisateur après l’enregistrement pour éviter qu’il soit directement connecté
    function wc_registration_redirect( $redirect_to ) {
    wp_logout();
    wp_redirect( ‘/mon-compte/?q=’);
    exit;
    }
    // Vérifier lorsqu’un utilisateur se connecte que son email a été validé
    function wp_authenticate_user( $userdata ) {
    $isActivated = get_user_meta($userdata->ID, ‘is_activated’, true);
    if ( !$isActivated ) {
    $userdata = new WP_Error(
    ‘inkfool_confirmation_error’,
    __( ‘ERREUR : Votre compte doit être activé avant de pouvoir vous connecter. Vous pouvez renvoyer l’email de confirmation en cliquant ID.'”>ici‘, ‘inkfool’ )
    );
    }
    return $userdata;
    }
    // Envoyer un email à un utilisateur qui s’enregistre
    function my_user_register($user_id) {
    // obtenir les données de l’utilisateur
    $user_info = get_userdata($user_id);
    // créer un hash md5 pour la vérification du compte
    $code = md5(time());
    // créer une chaine contenant le hash et l’id de l’utilisateur
    $string = array(‘id’=>$user_id, ‘code’=>$code);
    // créer une meta_key “is_activated” pour l’utilisateur et lui mettre le statut 0
    update_user_meta($user_id, ‘is_activated’, 0);
    // créer une meta_key “activationcode” pour l’utilisateur et lui mettre en tant que valeur le code d’activation généré précédemment
    update_user_meta($user_id, ‘activationcode’, $code);
    // créer l’url qui figurera dans le mail
    $url = get_home_url(). ‘/mon-compte/?p=’ .base64_encode( serialize($string));
    // contenu principal du mail
    $content = __(‘Cliquez sur le lien suivant pour valider votre compte :’);
    // titre de l’email
    $title = __(‘www.tandem83.com’);
    // sous-titre de l’email
    $subtitle = __(‘Validation de votre compte sur http://www.tandem83.com’);
    // signature de l’email
    $signature = __(‘l’équipe de Tandem’);
    // contenu html de l’email

    // envoyer l’email à l’utilisateur
    wc_mail($user_info->user_email, __(‘Validation de votre compte utilisateur’), $html);

    }
    // récupération et utilisation des valeurs passées en GET
    function my_init(){
    // on vérifie si on a bien reçu le paramètre contenant le code d’activation et l’id de l’utilisateur
    if(isset($_GET[‘p’])){
    $data = unserialize(base64_decode($_GET[‘p’]));
    $code = get_user_meta($data[‘id’], ‘activationcode’, true);
    // si oui, on vérifie que le code correspond à celui stocké dans la base de données pour l’utilisateur
    if($code == $data[‘code’]){
    // on met à jour le statut ‘is_activated’ du compte de l’utilisateur
    update_user_meta($data[‘id’], ‘is_activated’, 1);
    wc_add_notice( __( ‘Succès : Votre compte a été activé avec succès !’, ‘inkfool’ ) );
    }else{
    wc_add_notice( __( ‘Erreur : L’activation a échouée, veuillez contacter l’administrateur. ‘, ‘inkfool’ ) );
    }
    }
    if(isset($_GET[‘q’])){
    wc_add_notice( __( ‘Succès : Votre compte doit avoir été validé avant de pouvoir vous y connecter. Veuillez vérifier vos emails.’, ‘inkfool’ ) );
    }
    if(isset($_GET[‘u’])){
    my_user_register($_GET[‘u’]);
    wc_add_notice( __( ‘Succès : Votre email d’activation à été réenvoyé. Veuillez vérifier vos emails.’, ‘inkfool’ ) );
    }
    }
    // hooks et callbacks
    add_action( ‘init’, ‘my_init’ );
    add_filter(‘woocommerce_registration_redirect’, ‘wc_registration_redirect’);
    add_filter(‘wp_authenticate_user’, ‘wp_authenticate_user’,10,2);
    add_action(‘user_register’, ‘my_user_register’,10,2);

     

    Dans l’administration de woocommerce et de membership, je ne trouve aucun moyen particulier de validation d’un compte. Pas plus dans le gestion des comptes de la partie wordpress classique. Les comptes semblent validés par défaut – aucune action n’est possible.

     

    Je viens de refaire un test en cochant dans les réglages du site “tout le monde peut s’enregistrer. Même résultat, le compte est toujours en “attente de validation par un administrateur”. C’est un peu frustrant ^^

    • Ce sujet a été modifié le il y a 1 semaine et 3 jours par remy_tandem.
    • Ce sujet a été modifié le il y a 1 semaine et 3 jours par remy_tandem.
    #2370207
    remy_tandem
    Participant
    Initié WordPress
    2 contributions

    *ARF*

    Je crois bien que j’ai trouvé. Une extension WP Security est installée que j’avais oublié de checker.
    Elle sert comme son nom l’indique à sécuriser la création de compte sur la plate-forme mais du coup entre en conflit direct avec la création de compte client via woocommerce.

     

    Dans  “WP Sécurité” > “Enregistrement de l’utilisateur”

    décocher (tout bêtement) : Activer l’approbation manuelle des nouvelles inscriptions

     

     

    Le problème est résolu. ^^
    Désolé pour le dérangement mais cela pourra toujours servir à d’autres têtes de linotte comme moi ^^

     

    * sujet clos *

2 sujets de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.