Want to build a complex order form with extensive conditional logic? It's no fun with Gravity Forms.
I tried building a complex online order form for translation services and chose Gravity Forms for the job. I eventually succeeded, here's the form, but it took dozens of hours of trial-and-error and it was freaking frustrating.
Today, let's look at my 4 main reasons why I can't recommend Gravity Forms as a tool for this purpose: convolution, bugs, usability issues and pricing. I'll also talk a bit about how I made it work in the end, and indeed, Gravity Forms' positives as I experienced them.
Bear in mind, all of this is solely based on my experience. Your mileage may and, judging from Gravity Forms' good reputation, quite possibly will vary.
I'm a bit embarrassed to admit, I didn't realize Gravity Forms has a ticket system for registered users. It should have been obvious, but since I had previously seen so many support requests competently answered on the community forums, it didn't even occur to me to search for their Contact Us page, which is where the ticket system lives. If you need to find it: it's a small link in the footer bar at the very bottom of the website, next to the legal documents. Not an uncommon spot, but still possible to miss.
Mission Briefing: Here's what we tried to achieve
The form Natalia wanted features numerous dependencies between fields, requiring complex conditional logic and price calculations, plus a few extra features like an order summary before purchase, and unique order IDs.
After some research and comparison, I picked the often-recommended Gravity Forms, the self-proclaimed "Best WordPress form plugin". On paper, it's just the right tool for the job. It's powerful, versatile, extensible and I can confirm: it does provide all the features one needs to build a full-fledged online order form.
But holy cow, what a nightmare it is to work with.
While building Natalia's ordering system, I hit a number of roadblocks where I needed features that simply aren't available in Gravity Forms. I'll give you one example. If a translation is urgent, its price is supposed to double.
Doubling a price
You can set up product fields in Gravity Forms, like for instance: a university diploma would be a product. The field allows you to include choices, like: the diploma already has an apostille enclosed or not. Each choice can affect the total price.
Then, you can set up quantity fields and link them to the products, for instance: how many school diplomas should be translated? The quantity field multiplies the price of the product.
Furthermore, you can link option fields to your products. For instance: does the diploma come with an attachment or not? If yes, that's 20 Euros on top.
Now here's what you can't do: create an "urgency" field that doubles the price for all the above if the translation needs to be done in 24 hours. You'd think another quantity field would work, but GF won't let you do that. You can add one, but it simply won't function. Then, you'd think another option field might do the trick, but there's no "x2" feature for the price. Only absolute numbers.
The trial-and-error involved in learning all this cost a lot of time and nerves.
Yes, you can work around these limitations. What I did was, I created 12 dropdowns for urgency (one per product), where "1 week" got a value of 0 and "24 hours" got a value of 1. Then, I created 12 more fields for calculation and wrote formulas to add up all the above and multiply them with the value of my newly-created urgency fields. Times 0 if a user picks 1 week, times 1 if it's 24 hours.
It works, and for all intents and purposes, this is a testament to the power of Gravity Forms. Still, I found it frustrating to have to come up with such a complex workaround, and to have to find all this out via trial-and-error.
There are other examples of things being more complex than I anticipated. GF features conditional logic, as in "Choice A in Field A means field B will appear". However, there's no "Choice A in Field A and choice B in field B will make field C appear".
Also, instead of creating 12 products plus 12 quantity fields plus 12 urgency fields plus 12 urgency calculation fields, I would have loved to create 1 product with 12 dropdown/checkbox/radio button choices. However, there's no way to make these choices appear or disappear depending on what's selected in "Country of issuance".
Some of the issues I encountered can be solved through custom code, and there are some snippets online. Others, like the conditional choices, are featured in the "Gravity Perks" add-on pack. It easily costs as much as GF and when I tested the conditional choices, they straight-up didn't work.
That's not to mention that setting them up is its own cumbersome process (it involves creating an extra form and manually populating it with data from the front-end), and they won't work as triggers for later fields' conditional logic because they're dynamically populated.
Again, the trial-and-error involved in learning all this cost a lot of time and nerves.
About halfway through the project, Gravity Forms went off the rails and started firing bugs. To this day, I can't put my finger on what exactly triggered the cascade, but for a while there, one bug seemed to lead to another and I eventually resorted to re-building the entire order form from scratch.
The trouble with editing choices
As far as I can tell, it started when I renamed choices in dropdown fields that were used by later fields as triggers for conditional logic. Say, field B will appear only when a user selects "Bank transfer" in field A. Now, if you rename that choice to "Bank transfer | Germany", Gravity Forms will warn you that other fields' conditional rules depend on this choice, and renaming it will sever the connection.
So far, so good. However, I then tried to re-establish the connection by re-assigning the field, and it still wouldn't work in the front end. What's more, all of a sudden, my formulas for calculating prices would start breaking, and the fields whose choices I renamed would stop showing up in choice drop-downs in the back-end when trying to set up relationships. It was as if they had become invisible to the system!
Through fairly painful trial and error, I found out that the pipe "|" character that I was adding to the choices was breaking the fields. However, at that point, even after removing the character, other fields I had set up in completely separate test forms (!!), which didn't have that character at all, were and remained broken too.
Prices I had set up in those fields would no longer count towards totals either. Say, a birth certificate is supposed to cost 20 Euros. Now, selecting it left the total at 0.
In other news, I tried setting up a page break to make the Gravity Wiz add-on, "Preview Submission" work. Now, when a user clicked "Next" to go from page 1 to page 2, out of nowhere, Gravity Forms would add varying amounts to the subtotal.
Video: Price increases out of nowhere after clicking "Next" to get to page 2.
Did I ask for support?
I posted on the community forums, completely oblivious to the fact they have a full-blown ticket system for registered users. I did look for it on our account page and couldn't find it, but more attentive users will discover the small "Contact us" link in the website's footer bar, next to the legal documents. With the community forums being front-and-center in the main menu, I gave up the search too quickly and went there instead.
When they do respond to forum threads, the Gravity Forms team are quite friendly and helpful. They also respond fairly quickly. To be fair, I don't entirely blame them for not responding to my most serious two issues. I'd understand if my tone came across as passive-aggressive.
- Help! Price rises after clicking “next” to switch to page 2
- Need a field that doubles price of product including options
By the time I wrote the second thread, my patience was at an all-time low. Still, I tried my best to describe the issues I was experiencing in detail, included a video and one full-fledged bug report, and to this day, both threads remain unanswered.
I could have used some help, at least some pointers or a nudge towards the ticket system.
I still don't know what solved the problems
To this day, I don't know how or why, but after re-building the entire system from scratch, repeated reviews and attempts to set everything up right, saving and re-saving, slowly all elements of my form started working again.
Now, I understand that most of the time something goes wrong with computers, the problem is located between the chair and the screen. So I tried retracing my steps and double-/triple-checking all my settings, but after all is said and done, I can't chalk up these behaviours to anything other than straight-up bugs in the system.
It made it hard for me to trust Gravity Forms to work correctly.
The Gravity Forms UI has some quirks and bugs that interrupt your workflow.
Auto-saving is an important feature, but it gets annoying when it fires while you're in the middle of typing a word.
"Choices" dialog displaces the user
Whenever you open the "Choices" dialog in a drop-down, checkbox or similar field, the UI jumps back to the top of the form, forcing you to scroll all the way back down to where you were working.
As you can imagine, this becomes really frustrating if you're building a long and complex form.
"Conditional Formatting" dialog won't close
Every once in a while, the "close" button on the conditional formatting dialog doesn't work. When you click it, the dialog disappears and immediately re-appears.
You can work around this by clicking somewhere outside the field, on the form layout. That way, however, you lose focus on the module you were editing, so if you weren't done with it, you now need to re-select it.
Video: Disruptive auto-saving
Video: "Choices" dialog displaces the user
Video: "Conditional Formatting" dialog won't close
Gravity forms, especially if you buy the add-on package on top of it, is expensive as &%$#.
We're talking about a product that costs $159 per year for the Pro license, which is the one you need if you want PayPal integration. That's twice the price of the entire Microsoft Office suite. Adobe's Lightroom and Photoshop combined cost $120 per year.
For our purpose, Gravity Forms costs $159 per year. That's twice the price of the entire Microsoft Office suite. Add the add-on package, and you're paying over $300 per year.
What's more, Natalia wanted unique order IDs and an order summary that appears at the end of the form. For these features, one needs the "Gravity Perks" add-ons package by Gravity Wiz, which costs another $149 per year if you want to use up to 3 (!) of the 42 available add-ons.
So we're looking at $308 per year. I understand other form builders (e.g., WPForms) are similarly or more expensive, but I don't think the price is justifiable considering the product's lackluster performance.
Is Gravity forms crap?
No. I do think it's a powerful system to build web forms that offers a lot of options, flexibility and versatility. However, I had a particularly bad time with it and I honestly wouldn't use it again.
It's convoluted if you want to build a complex web form with several levels of conditional logic. You can' trust it to work in a stable and reliable manner, and if you encounter some of the worse bugs, it's erratic and unpredictable. It has UI/UX kinks that slow down your workflows. You can't be sure to receive support (though if you do, it's really solid). Lastly, it's expensive, especially if you need the "Gravity Perks" add-on package to extend the core functionality.
If I need to build a similar web form in the future, I'll probably look into WPForms, the other "world's best drag & drop form builder" ;-). Is this the best recommendation I can give you for now? Unfortunately, yes. I can tell you Contact Form 7 isn't up to the task, and from what I could tell in my quick tests, WooCommerce isn't either - at least not unless you use a lot of extensions.
Have you used Gravity Forms? What for? What were your experiences?