- WordPress :4.7
- Statut : résolu
- Ce sujet contient 3 réponses, 1 participant et a été mis à jour pour la dernière fois par
Timama, le il y a 8 années et 4 mois.
-
AuteurMessages
-
23 janvier 2017 à 18 h 42 min #1616053
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
24 janvier 2017 à 12 h 00 min #1616206bonjour,
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
24 janvier 2017 à 13 h 19 min #1616237j’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é
25 janvier 2017 à 10 h 00 min #1616405okay, 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;
}
//}
} -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.