web-dev-qa-db-fra.com

Code de formulaire d'inscription frontale - Champ de mot de passe non enregistré

J'ai un formulaire d'inscription frontal qui fonctionne presque parfaitement, sauf que les mots de passe ne sont pas définis correctement.

Dans mon functions.php j'ai -

/**
 * Registration form
 *
 */

add_action('template_redirect', 'register_a_user');
function register_a_user(){
  if(isset($_GET['do']) && $_GET['do'] == 'register'):
    $errors = array();
    if(empty($_POST['user']) || empty($_POST['email'])) $errors[] = 'provide a user and email';
    if(!empty($_POST['spam'])) $errors[] = 'gtfo spammer';
    if(!empty($_POST['pass1']) && !empty($_POST['pass2'])) $error[] = 'The passwords you entered do not match';

$account = esc_attr($_POST['account_type']);
    $user_login = esc_attr($_POST['user']);
    $user_email = esc_attr($_POST['email']);
 $user_pass = esc_attr($_POST['pass1']);
 $user_pass2 = esc_attr($_POST['pass2']);
    require_once(ABSPATH.WPINC.'/registration.php');

    $sanitized_user_login = sanitize_user($user_login);
    $user_email = apply_filters('user_registration_email', $user_email);

    if(!is_email($user_email)) $errors[] = 'invalid e-mail';
    elseif(email_exists($user_email)) $errors[] = 'this email is already registered, bla bla...';

    if(empty($sanitized_user_login) || !validate_username($user_login)) $errors[] = 'invalid user name';
    elseif(username_exists($sanitized_user_login)) $errors[] = 'user name already exists';

    if(empty($errors)):
 if ( $_POST['pass1'] == $_POST['pass2'] ) {

 $user_data = array (
        'user_login' => $sanitized_user_login,
        'user_password' => $user_pass,     
        'user_email' => $user_email,
        'role' => $account
    );

    // Create the user
    $user_id = wp_insert_user( $user_data );

} else { 
$errors[] = 'passwords dont match'; 
}


      if(!$user_id):
        $errors[] = 'registration failed...';
      else:
        wp_new_user_notification($user_id);
      endif;
    endif;

    if(!empty($errors)) define('REGISTRATION_ERROR', serialize($errors));
    else define('REGISTERED_A_USER', $user_email);
  endif;
}

Et sur mon modèle de page de registre -

<?php
  if(defined('REGISTRATION_ERROR'))
    foreach(unserialize(REGISTRATION_ERROR) as $error)
      echo "<div class=\"error\">{$error}</div>";
  // errors here, if any

  elseif(defined('REGISTERED_A_USER'))
    echo 'a email has been sent to '.REGISTERED_A_USER;
?>

<h2>REGISTER</h2>
<!-- REGISTER FORM -->
<form method="post" id="register-form" action="<?php echo add_query_arg('do', 'register'); ?>">

<!-- CHOOSE ACCOUNT TYPE AKA USER ROLE -->
<h4>Choose Account Type</h4>
<select name="account_type" class="form-control">
<option value="agent">Agent</option>
<option value="broker">Broker</option>
</select>

<!-- ENTER ACCOUNT DETAILS -->
<h4>Account Details</h4>

<input type="text" name="email" class="form-control" value="" placeholder="Email" />

<input type="text" name="user" class="form-control" value="" placeholder="Username"/>

<input type="text" name="pass1" class="form-control" value="" placeholder="Password" />

<input type="text" name="pass2" class="form-control" value="" placeholder="Confirm Password" />

Delete this text
<input type="text" name="spam" class="form-control" value="spam_protection" />

<!-- REGISTER BUTTON -->
<input type="submit" value="REGISTER" />

</form>
1
Rich

$ user_data a une clé de tableau incorrecte pour le mot de passe. Il doit s'agir de user_pass au lieu de user_password . Pour plus de références s'il vous plaît vérifier wp_insert_user ()

3
Piyush Rawat