In this tutorial, we demonstrate how to implement jQuery-based form validation in WordPress, including AJAX-based username and email existence checks.
Step 1: Load jQuery and Validator Plugin
<!-- jQuery library --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- jQuery Form Validator --> <script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
Step 2: Form Markup
<form id="myForm"> <label for="username">Username:</label> <input type="text" name="username" id="username" required pattern="[A-Za-z0-9_]+"> <label for="email">Email:</label> <input type="email" name="email" id="email" required> <label for="password">Password:</label> <input type="password" name="password" id="password" required minlength="6"> <label for="confirmPassword">Confirm Password:</label> <input type="password" name="confirmPassword" id="confirmPassword" required equalTo="#password"> <button type="submit">Submit</button> </form>
Step 3: jQuery Validator Setup
<script> $(document).ready(function() { $("#myForm").validate({ rules: { username: { required: true, pattern: /^[A-Za-z_]+$/, // Only letters and underscores allowed remote: { url: ajaxurl, type: "post", data: { action: "check_username_exists", username: function() { return $("#username").val(); } } } }, email: { required: true, email: true, remote: { url: ajaxurl, type: "post", data: { action: "check_email_exists", email: function() { return $("#email").val(); } } } }, password: { required: true, minlength: 6 }, confirmPassword: { required: true, equalTo: "#password" } }, messages: { username: { required: "Please enter a username.", pattern: "Only letters and underscores are allowed.", remote: "This username is already taken." }, email: { required: "Please enter your email address.", email: "Please enter a valid email address.", remote: "This email address already exists." }, password: { required: "Please enter a password.", minlength: "Password must be at least 6 characters long." }, confirmPassword: { required: "Please confirm your password.", equalTo: "Passwords do not match." } } }); }); </script>
Step 4: PHP Functions for AJAX
<script> $(document).ready(function() { $.validator.addMethod( "noNumeric", function(value, element) { return this.optional(element) || /^[^0-9]+$/i.test(value); }, "Please enter a value without numeric characters." ); $("#myForm").validate({ rules: { // Other rules here noNumericField: { noNumeric: true } }, messages: { // Other messages here noNumericField: { noNumeric: "Please enter a value without numeric characters." } } }); }); </script>
Step 5: Enqueue Script with AJAX URL
// Check if username exists in the database add_action('wp_ajax_check_username_exists', 'check_username_exists'); add_action('wp_ajax_nopriv_check_username_exists', 'check_username_exists'); function check_username_exists() { $username = $_POST['username']; $user_id = username_exists($username); if ($user_id) { echo 'false'; } else { echo 'true'; } exit; } // Check if email exists in the database add_action('wp_ajax_check_email_exists', 'check_email_exists'); add_action('wp_ajax_nopriv_check_email_exists', 'check_email_exists'); function check_email_exists() { $email = $_POST['email']; $user_id = email_exists($email); if ($user_id) { echo 'false'; } else { echo 'true'; } exit; } // Check if username contains no numeric value add_action('wp_ajax_check_username_no_numeric', 'check_username_no_numeric'); add_action('wp_ajax_nopriv_check_username_no_numeric', 'check_username_no_numeric'); function check_username_no_numeric() { $username = $_POST['username']; if (preg_match('/\d/', $username)) { echo 'false'; } else { echo 'true'; } exit; }
add_action('wp_enqueue_scripts', 'my_enqueue_scripts'); function my_enqueue_scripts() { wp_enqueue_script('my-custom-script', get_stylesheet_directory_uri() . '/js/custom-script.js', array('jquery', 'jquery-validate'), '1.0', true); wp_localize_script('my-custom-script', 'ajaxurl', admin_url('admin-ajax.php')); }
That’s it! You now have a functional registration form with advanced validation for both the client and server side in WordPress.