2014-06-16 3 views
1

J'ai ajouté de nouveaux champs à mon formulaire d'enregistrement de woocommerce, mais je ne peux pas valider ces nouveaux champs.La validation du formulaire d'enregistrement Woocommerce ne fonctionne pas

Il y a mes nouveaux champs

add_action('register_form','myplugin_register_form'); 
function myplugin_register_form(){ 
    $first_name = (isset($_POST['first_name'])) ? $_POST['first_name']: ''; 
    $last_name = (isset($_POST['last_name'])) ? $_POST['last_name']: ''; 
    ?> 
    <div class="row"> 
     <div class="col-md-4"> 
      <label for="first_name">Prénom <span class="required">*</span></label> 
      <input type="text" class="input-text" name="first_name" id="first_name" value="<?php if (! empty($_POST['first_name'])) echo esc_attr($_POST['first_name']); ?>" /> 
     </div> 
     <div class="col-md-4"> 
      <label for="last_name">Nom <span class="required">*</span></label> 
      <input type="text" class="input-text" name="last_name" id="last_name" value="<?php if (! empty($_POST['last_name'])) echo esc_attr($_POST['last_name']); ?>" /> 
     </div> 
    </div> 
    <?php 
} 

Et ceci est mon filtre pour la validation selon la wordpress codex https://codex.wordpress.org/Customizing_the_Registration_Form

function myplugin_registration_errors ($errors, $sanitized_user_login, $user_email) { 

    if (empty($_POST['first_name'])) 
     $errors->add('first_name_error', __('<strong>ERROR</strong>: You must include a first name.','mydomain')); 

    return $errors; 
} 

Quand je soumets ma forme, sans le champ $ _POST [ 'prenom '] ça passe sans erreurs.

Quelle est la meilleure façon de le faire?

Merci pour votre aide

Répondre

1

Si vous regardez dans woocommerce-fundtions.php il vérifier $woocommerce->error -count() == 0 puis procéder. Ainsi, au lieu d'ajouter des erreurs à wordpress $errors Je voudrais ajouter des erreurs à WooCommerce comme $woocommerce->add_error($reg_errors->get_error_message())

Ainsi, le code serait

add_filter('registration_errors', 'myplugin_registration_errors'), 10, 3); 

function myplugin_registration_errors($errors, $sanitized_user_login, $user_email) { 
    global $woocommerce; 

    if (empty($_POST['first_name'])) 
     $woocommerce->add_error('first_name_error', __('<strong>ERROR</strong>: You must include a first name.','mydomain')); 

    return $errors; 
} 
3

S'il vous plaît écrire ce code dans le functions.php du thème de thème/de l'enfant

/** 
* Validate the extra register fields. 
* 
* @param string $username   Current username. 
* @param string $email    Current email. 
* @param object $validation_errors WP_Error object. 
* 
* @return void 
*/ 
function wooc_validate_extra_register_fields($username, $email, $validation_errors) { 

    if (isset($_POST['first_name']) && empty($_POST['first_name'])) { 
     $validation_errors->add('first_name_error', __('<strong>Error</strong>: First Name is required!.', 'woocommerce')); 
    } 

    if (isset($_POST['last_name']) && empty($_POST['last_name']) ) { 
     $validation_errors->add('last_name_error', __('<strong>Error</strong>: Last Name is required!.', 'woocommerce')); 
    } 
} 

add_action('woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3); 
+0

Salut, bienvenue à SO. À l'avenir, il est généralement plus utile à l'OP si vous pouvez ajouter d'autres instructions sur la façon de mettre en œuvre votre solution, car ils peuvent être des programmeurs débutants. Il aide également les futurs lecteurs du post – Deepend

Questions connexes