How to add custom fields to my custom registration form

There’s wp_login_form() for such cases. It offers tons of hooks to extend it.

// In your template
wp_login_form( array( /* Args: refer to Codex page */ ) );

A more in-depth look at the filters, can be found here @GitHub WP Core source.

  • 'login_form_top' – above login-username
  • 'login_form_middle' – above login-submit
  • 'login_form_bottom' – below login-submit

My personal suggestion is: Don’t use an AJAX login form. It’s hard to maintain, much easier to hack (in some cases) and will be a pain, when there’re other parts on the page, that show logged-in/visitor information, as you’ll have to maintain all your login forms on-the-fly UI updates with every change on the page.

If you still want to do the whole thing with AJAX, then I’d suggest to register an event listener/handler to id_submit (the arg that is used in the template tag above). There you can easily return false; or use event.preventDefault(); to disable the redirection and roll your own registration (copy core).