Take a look at the Profile2 module. When I first encountered it, I was a little confused about its purpose and why 18k+ sites found it so useful :-p Turns out it is great for storing and organizing user information when you have many fields associated with each user.
The Profile2 module creates and maintains new profile entities attached to user accounts. For the uninitiated, in Drupal 7 an entity is a set of information, usually with fields attached. Nodes are entities, users are entities, relations are entities, etc. Profile entities behave similar to new nodes, except that they are attached to user accounts. Users are able to edit their profiles on a separate page from the actual account page, or as part of the account page itself (depending on the settings you choose).
For your project, here's what I'd recommend:
Install and enable Profile2. This automatically creates a new default "Main" profile.
Edit the settings for the "Main" profile at admin/structure/profiles/manage/main
. Uncheck "Show during user account registration" and check "Provide a separate page for editing profiles".
Add the additional user fields you want at admin/structure/profiles/manage/main/fields
. If there are still more fields than should be stored and edited on a single page, create an additional profile type at admin/structure/profiles/add
, or use Field group (Javascript based) to break the form down into groups.
Install and enable Rules. Create a Rule that directs new user accounts to the profile edit page: profile-main/[account:uid]/edit
. If you needed additional profiles to break down the form further, add additional Rules directing the user to those pages by reacting to the event "After saving a new profile".
Rule export code:
{ "rules_direct_new_accounts_to_profile_edit_page" : {
"LABEL" : "Direct new accounts to profile edit page",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "rules" ],
"ON" : [ "user_insert" ],
"DO" : [ { "redirect" : { "url" : "profile-main\/[account:uid]\/edit" } } ]
}
}
This has the benefit of being able to separate the account settings (e-mail, username, password) from the information about the user (the profile fields). Using this configuration, you can achieve the desired multi-step user registration form without writing a line of code. The only caveat that you should be aware of is that a user can leave the workflow after creating an account without creating a profile (even though Rules automatically directs them to the profile edit page, there's nothing keeping them from clicking a link to another part of the site). Additional Rules may be necessary to require the user to complete the profile before using the rest of the site.