[Résolu] gform_field_validation et page de login utilisateur wordpress (Créer un compte)

  • WordPress :4.7
  • Statut : résolu
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Messages
  • #1616053
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL :
    • Thème utilisé : le mien
    • Extensions en place : Gravity
    • Nom de l’hébergeur : Strato
    • Adresse du site :

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

     

    Bonjour,

    J’utilise gravity form pour les formulaires.

    Pour mon site, j’ai créé une page de connexion à un espace membre (utilisateur de mon site wordpress).

    Pour cette page de login, j’ai utilisé le tuto suivant:

    http://wp-doin.com/2014/09/24/gravity-front-end-login-register/

     

    Mais je n’arrive pas à faire fonctionner « gform_field_validation ».

    J’ai un problème pour récupérer les datas de l’utilisateur qui se connecte.
    Voici ma fonction :

    /*Gform field validation hook*/
    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    // this function is fired via recurrence for each field, s
    global $user;
    $user_id = $user->ID;
    //$user_role = array_shift($user->roles);

    echo 'user_id=' .$user_id;?> </br> <?php


    if ($user_role == 'mitglieder_mitglieder' ) {
    $admission = array_shift($user1->usermitglieder_admission);
    }
    if ($user_role == 'mitglieder_partnerorganisationen' ) {
    $admission = array_shift($user1->userpartnerorga_admission);
    }


    if ($user_role != 'mitglieder_partnerlieferanten' )
    {

    if ( $field['cssClass'] == 'benutzername' ) {
    $user = get_user_by( 'login', $value );
    if ( empty( $user->user_login ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid username provided.";
    }
    }
    // validate pass
    if ( $field['cssClass'] == 'passwort' ) {
    if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid password provided.";
    }
    }
    return $result;
    }
    else
    {
    echo ' Sie können nur in Lieferantenbereich anmelden';
    }
    }

    J’ai remarqué déjà que il y a 2 passages qui se fait sur cette fonction :

    Le premier passage  me dira par exemple que user_ide est vide et le deuxième passage me donnera le bon ID.

    Les données sont donc vide ce qui fait tout planter.

    Je n’arrive pas à m’en sortir et je ne comprends pas pourquoi il y a 2 passages dans cette fonction.

    Avez vous des conseils d’utilisation pour cette fonction?

    merci pour votre aide

    Timama

     

     

    #1616206
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    bonjour,

    ALors, j’ai un peu mieux compris mon problème…. j’arrive a faire les différents cas de sélection pour la connexion d’un utilisateur (il doit avoir un role particulier et être admis).

    MAintenant, je n’arrive pas à faire des redirections de page

    /*Gform after submission hook*/
    add_action( "gform_after_submission_124", "login_form_after_submission_124", 10, 2 );
    function login_form_after_submission_124($entry, $form) {
    // get the username and pass
    $username = $_POST['user_login'];
    $pass = $_POST['user_password'];
    $creds = array();

    // create the credentials array
    $creds['user_login'] = $username;
    $creds['user_password'] = $pass;

    // sign in the user and set him as the logged in user
    $user = wp_signon( $creds );
    wp_set_current_user( $user->ID );
    }

    /*Gform field validation hook*/
    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    global $user;
    // validate username
    if ( $field['cssClass'] === 'benutzername' ) {
    $user = get_user_by( 'login', $value );
    if ( empty( $user->user_login ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid username provided.";
    }
    }
    // validate pass
    if ( $field['cssClass'] === 'passwort' ) {
    if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid password provided.";
    }
    }
    $user_role = array_shift($user->roles);
    //echo 'user_role=' .$user_role;?> </br> <?php

    if ($user_role !== 'mitglieder_partnerlieferanten' )
    {
    //echo 'PASSAGE différent de mitglieder_partnerlieferanten';
    if ($user_role == 'mitglieder_mitglieder' )
    {
    $admission = $user->usermitglieder_admission;

    }
    if ($user_role == 'mitglieder_partnerorganisationen' )
    {
    $admission = $user->userpartnerorga_admission;
    }

    if (($admission == 'ja' ) OR ($user_role == 'administrator' ) )
    {
    //echo 'admission=' .$admission;?> </br> <?php
    //echo 'PASSAGE admission ja ou administrator';
    wp_redirect('http://www.kmuzentrale.de/Mitgliederbereich/');
    exit;
    }
    else
    {
    echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    wp_redirect(home_url());
    exit;
    }
    return $result;

    }
    else
    {
    echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");</script>';
    wp_redirect(home_url());
    exit;
    }



    }

    Je passe donc dans les différents cas mais dès que j’utilise wp_redirect, cela me fait une page blanche..

    Avez vous rencontrez ce problème déjà ?

    Merci pour votre aide et vos conseils

    TImama

    #1616237
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    j’ai bougé la question dans

    https://wpfr.net/support/sujet/redirection-dans-functions-php-donne-une-page-blanche/

     

    car je pense que le sujet de la question a changé

     

     

    #1616405
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    okay, donc en fait rien à voir avec le lien que j’ai donné ci dessus. il falait bien placer les éléments dans la fonction pour qu’ils ne soient pas lu 2 fois et donc non vide….

    et là ça fonctionne (ajouter des cas d’étude à la fonction gform_field_validation)

    /*Gform after submission hook*/
    add_action( "gform_after_submission_124", "login_form_after_submission_124", 10, 2 );
    function login_form_after_submission_124($entry, $form) {
    // get the username and pass
    $username = $_POST['user_login'];
    $pass = $_POST['user_password'];
    $creds = array();

    // create the credentials array
    $creds['user_login'] = $username;
    $creds['user_password'] = $pass;

    // sign in the user and set him as the logged in user
    $user = wp_signon( $creds );
    wp_set_current_user( $user->ID );
    }


    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    global $user;
    // validate username
    if ( $field['cssClass'] === 'benutzername' ) {
    $user = get_user_by( 'login', $value );
    if ( empty( $user->user_login ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid username provided.";
    }
    // AJOUT TEST POUR SAVOIR SI LE USER EST LIEFERANTEN
    $user_role = array_shift($user->roles);
    //echo 'user_role=' .$user_role;?> </br> <?php
    if ($user_role !== 'mitglieder_partnerlieferanten' )
    {
    if ($user_role == 'mitglieder_mitglieder' )
    {
    $admission = $user->usermitglieder_admission;

    }
    if ($user_role == 'mitglieder_partnerorganisationen' )
    {
    $admission = $user->userpartnerorga_admission;
    }
    //echo 'admission=' .$admission;?> </br> <?php
    // AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
    if (($admission == 'ja' ) OR ($user_role == 'administrator' ) )
    {
    //echo 'PASSAGE admission ja ou administrator benutzername';?> </br> <?php
    return $result;
    }
    else
    {
    echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    }
    }
    else
    {
    echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");
    </script>';
    }
    // FIN AJOUT

    }
    // validate pass
    if ( $field['cssClass'] === 'passwort' ) {
    if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    $result["is_valid"] = false;
    $result["message"] = "Invalid password provided.";
    }
    return $result;
    }


    //}
    }

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