You don’t need to call 'pre_user_*'
filters, that are called by WordPress inside wp_insert_user
.
Also I suggest to use php filter_input
or filter_input_array
to sanitize form input.
Example code:
$args = array(
'pwd1' => FILTER_SANITIZE_STRING,
'pwd2' => FILTER_SANITIZE_STRING,
'first_name' => FILTER_SANITIZE_STRING,
'last_name' => FILTER_SANITIZE_STRING,
'username' => FILTER_SANITIZE_STRING,
'email' => FILTER_SANITIZE_STRING
);
$form_data = filter_input_array( INPUT_POST, $args, TRUE );
$keys = array_keys($args);
$required = TRUE;
while ( ! empty( $keys ) && $required ) {
$key = array_shift( $keys );
if ( empty( $form_data[$key] ) ) $required = FALSE;
}
if( ! $required ) {
$err="Please don\"t leave the required fields.';
} else if( ! filter_var( $form_data['email'], FILTER_VALIDATE_EMAIL ) ) {
$err="Invalid email address.";
} else if( $form_data['pwd1'] !== $form_data['pwd2'] ){
$err="Password do not match.";
} else {
$user_data = array(
'user_login' => $form_data['username'],
'user_pass' => $form_data['pwd1'],
'user_email' => $form_data['email'],
'role' => 'subscriber'
);
$user_id = wp_insert_user( $user_data );
if( is_wp_error( $user_id ) ) {
$err="Error on user creation: " . $user_id->get_error_message();
} else {
do_action('user_register', $user_id);
$success="You\"re successfully register';
}
}