Gravity Forms Chained Selects - WordPress Plugin
Gravity Forms Chained Selects is a plugin that simplifies the creation of cascading fields within Gravity Forms, enhancing the form-building experience for WordPress users. This addon streamlines the process of setting up dependent dropdowns, offering a seamless solution for implementing dynamic and interactive form elements.

Plugin Features
With intuitive functionality, Gravity Forms Chained Selects empowers users to effortlessly establish relationships between options in dropdown menus, allowing for a more organized and user-friendly form submission process. By enabling the chaining of select fields based on previous selections, it enhances the efficiency and customization potential of Gravity Forms.
By seamlessly integrating into the Gravity Forms ecosystem, the plugin harmoniously extends the form-building capabilities of WordPress websites. Users can easily configure dependent dropdowns, creating a personalized and responsive form experience for their site visitors. This feature-rich addon enriches the form creation process, enabling users to create intricate and logic-based forms with ease.
The flexibility of this plugin lends itself to a variety of use cases, from simple contact forms to complex surveys or order forms. Its ability to dynamically tailor form options based on user selections provides a sophisticated yet user-friendly approach to data collection and interaction on WordPress websites. This addon effectively bridges the gap between form requirements and user experience needs.
With this plugin, users can unlock a new level of form interactivity, allowing for advanced data collection and user engagement strategies. By implementing cascading fields effortlessly, website owners can enhance user interaction, streamline data submission processes, and ultimately improve the overall user experience on their WordPress sites. This addon is a valuable addition to any WordPress user seeking to elevate their form-building capabilities.
Specifications:
| Release date: | 12-07-2019 | |
| Last updated: | 14-08-2026 | |
| Type: | Paid | |
| License: | GPL | |
| Subject: | Contacts & Feedback for Gravity Forms | |
| Compatibility: | W5.x W6.x | |
| Includes: | Plugin | |
| Language packs: |
|
|
| Developer: | Gravity Forms | |
| Rating: | ||
Share with your friends!
Guide to Setting Up Gravity Forms Chained Selects for Dependent Lists in WordPress Forms
Gravity Forms Chained Selects is not meant for a basic dropdown. It is designed for cases where a user's first choice should progressively narrow the next one. In this guide, we will walk through how to prepare your data, add the field to a form, import a CSV, test how it behaves on the site, and diagnose issues that cause cascading lists to show the wrong options or fail to update after a selection.
The main focus here is hands-on work with a plugin that is already installed. First, we will identify when dependent lists actually make a form easier to use, then go through the setup inside the Gravity Forms editor, build a sample service request form, review notifications and the saved entry, and finish by comparing Chained Selects with similar solutions for WordPress forms.
This guide is intended for a site owner, webmaster, or developer who wants to replace long dropdowns, conditional logic with dozens of rules, or unstructured text input with a clean chain like "category - subcategory - specific option." If you only need to show a single list with 5 to 10 items, the plugin may be unnecessary. If you have a large set of options that depend on each other, Chained Selects saves users time and keeps your data cleaner.
When Dependent Lists Work Better Than Standard Form Fields
A standard dropdown works well as long as there are only a few options and they do not depend on context. But as soon as a user needs to choose a region first, then a city, then an office, one long list turns into a source of mistakes. People see too many irrelevant items, pick similar-looking values, miss the correct branch, or type an answer manually into an "Other" field. For the site owner, that means messy submissions, harder entry filtering, and more manual review.
A dependent list works differently. Each level opens based on the previous selection. Instead of scanning the entire directory, the user follows a short path: first a broad category, then a refinement, then a specific option. In Gravity Forms Chained Selects, that path is defined by the structure of the CSV file: each column becomes a separate dropdown, and each row describes an allowed combination.
The plugin's biggest strength is standardizing complex choices without relying on dozens of separate conditional logic rules. Instead of building a set of fields and hiding them based on conditions, you create a relationship table. That is especially useful when the data later needs to be sent to a CRM, spreadsheet, support team, report, or internal catalog. The entry stores structured values instead of arbitrary text.
Scenarios Where Cascading Selection Makes Sense
Chained Selects has several common use cases that are supported by the documentation and translate well to real-world websites:
- Vehicle selection using the chain
Year,Make,Model, where the make depends on the year and the model depends on the make. - Service center booking: service area, service type, and the specific service or specialist.
- Product or parts catalogs: category, series, model, compatible part.
- Locations: country, region, city, office, or pickup point.
- Education requests: faculty, program, course, module.
- Product support: product line, product, version, issue type.
In all of these cases, the form becomes shorter not because it has fewer fields, but because the user only sees options that make sense after the previous step. That reduces the risk of invalid combinations, such as a city from the wrong region or a model that does not belong to the selected brand.
When the Plugin May Be Overkill
Chained Selects should not be used as a universal replacement for every list. If a field has 3 or 4 independent options, a standard Drop Down, Radio Buttons, or Checkboxes will be simpler. If the selection depends on complex business logic, calculations, user roles, or an external database, you may need dynamic population through filters or a different tool. If the data is updated frequently by multiple managers, it is worth deciding up front who owns the CSV and how its quality will be checked.
There is also an important UX tradeoff: a cascading list hides some options until the previous level has been selected. That works well for large directories, but it is a poor fit when users need to compare all available options at once. For example, if a visitor is choosing between 5 pricing plans, a dependent chain only makes the decision harder.
How Chained Selects Works Inside a Form
In the Gravity Forms editor, the Chained Selects field appears as a single composite form element. On the public site, it renders as several linked dropdowns. The first list gets its initial values from the first column of the CSV. When the user selects a value, the next list shows only the options that appear next to that selected value in the CSV. That is how the chain is built step by step.
The logic is simpler than it may seem. You can think of the CSV file as a table of allowed paths. Each row is one path from the first level to the last. If you have a service like "Repair - Laptops - Diagnostics," it occupies one row. If the same category has another subcategory, that becomes another row. The column headers become the labels for each level, so they should be clear and consistent.
What Happens When the User Makes a Selection
Imagine a service request form. The first CSV column contains categories like "Computers," "Smartphones," and "Peripherals." The second column holds the device or service type, and the third contains the specific action. If the user selects "Computers," the second list should not show options from the smartphone branch. If they then choose "Laptops," the third list should only keep the options related to laptops.
This approach helps not only the visitor, but also the administrator. The Gravity Forms entry stores the sequence of selected values. Those values can be used in notifications, confirmations, entry exports, and downstream processing. The field also supports a merge tag by field ID, and an individual value inside the chain can be addressed with dot notation if you need to target a specific level.
CSV as the Source of Truth
The plugin's main working asset is not a checkbox in the interface, but a well-prepared table. Errors in the CSV almost always show up on the site: duplicates, empty branches, unexpected options, or inconsistent spelling of the same value. That is why the CSV should be treated like a small database. Keep it in a clear location, maintain a change history, and validate its structure before importing it.
Practical rule: if it is hard for a manager to explain the table without the form, it will be hard for a user to complete the form without making mistakes. Make the selection tree clear in the table first, then bring it into Gravity Forms.
Who This Plugin Is For, and When Another Approach Is Better
Gravity Forms Chained Selects is especially useful when a site already uses Gravity Forms as its main form builder. In that case, the plugin adds a specialized field without requiring a different form system, a different entry system, or a different notification workflow. If the project already has Gravity Forms notifications, confirmations, exports, integrations, and anti-spam set up, dependent lists become part of a familiar process.
A Strong Fit for Agencies and Complex Requests
Agencies often maintain sites with many similar forms: product selectors, service requests, support inquiries, consultation bookings. In those projects, the form's appearance matters, but the quality of the resulting data matters just as much. Chained Selects helps lock valid combinations into a single CSV instead of spreading them across dozens of fields and conditions.
The plugin is also a good fit for sites where one reference directory is used for a long time and updated periodically: a product lineup, a list of branches, a service catalog, or academic programs. If the data can be prepared in a spreadsheet and changed infrequently, importing CSV is simpler than writing custom code for an external source.
When You Need a Developer
If the options need to come from a database, a REST API, or another external source, it may be difficult to implement without a developer. The official documentation covers filters for modifying choices programmatically, as well as a separate filter for passing an import file. That is a powerful path, but it requires careful code, an understanding of caching, and testing on a copy of the site. For a typical site owner, it is safer to start with CSV and move to filters only when manual import truly stops being practical.
When It Makes Sense to Look at Alternatives
If the task is broader than a single cascading list, it is worth comparing several approaches. For example, if you need to dynamically pull WordPress posts, users, taxonomy terms, or table data, Gravity Wiz GF Populate Anything may be more flexible. If the project is not yet tied to Gravity Forms, you might consider Formidable Forms or WS Form, where similar scenarios may fit into a different form builder and feature set. But if you are already working in the Gravity Forms ecosystem and your main requirement is hierarchical lists from CSV, Chained Selects remains the most direct solution.
What to Check Before Installation and CSV Import
Preparation matters just as much as the installation itself. Chained Selects depends on Gravity Forms, runs in WordPress, and uses JavaScript on the front end. Before adding the field, check the environment, verify access to the add-on, and review the quality of the source data. That will save more time than trying to debug issues after the form is already live.
WordPress and Gravity Forms Environment
Make sure the site meets Gravity Forms system requirements and is running in a supported environment. Gravity Forms documentation specifically notes that add-ons depend on the core Gravity Forms version: if the core version is too old, that should show up during installation or update. This guide should not lock version numbers in as if they were permanent, because they change over time, but before production use you should always review the current requirements page and changelog.
Also make sure you actually have access to the add-on. The official Chained Selects page states that it is available with specific Gravity Forms license tiers. This guide does not cover purchasing or license activation, but before installation you should know whether the project is entitled to download and update the add-on through the normal process.
Source Table Quality
Before importing, open the table and review it like a data editor would:
- The first row contains headers, and each header is meaningful to the user, such as
Category,Service,Provider. - The columns run left to right in the order the user is expected to make selections.
- Matching values do not contain extra spaces, inconsistent capitalization, or random characters.
- Each row describes a complete valid path, not a partial branch with no child value.
- The file is saved as CSV, not XLSX, an HTML table, or a copied sheet with formatting.
- Non-English values have been checked for encoding. If strange characters appear after import, start by saving the CSV as UTF-8.
Pay especially close attention to spaces at the beginning and end of values. The documentation specifically warns that extra spaces can lead to unpredictable option output. In practice, that looks like two values that appear identical visually, but the plugin treats them as different branches.
Rollback Plan
Before changing a live form, duplicate the form or create a test form. If you already have entries, do not delete the old fields right away. Add Chained Selects next to the test logic, verify entries, notifications, and exports, and only then replace the old setup. If something goes wrong, you will be able to disable the new field or revert to the previous form without losing submissions.
Installing the Add-On and Running the First Check in the Form Editor
The installation follows the standard Gravity Forms add-on flow. In the WordPress admin panel, you can go to Forms - Add-Ons, find the required add-on, install it, and activate it. Another path is to upload the ZIP through Plugins - Add New - Upload Plugin. After activation, do not rush to publish the form. Open the editor first and confirm that the field appears in the field library.
Where to Find the Chained Selects Field
In the documentation, the field is listed among Gravity Forms advanced fields. In the form editor, add the Chained Selects field in the appropriate place and open its settings. It behaves like a composite field: it has general settings, appearance settings, and special options related to importing choices and displaying the dropdowns.
At this stage, it is important to give the field a clear label. If the form is collecting a service request, a label like "What do you need help with?" is more useful than "Chained Selects." The user does not need to know the field's technical type. They need to understand what kind of selection path is expected.
Quick Check After Activation
Before importing a large CSV, create a small test file with 5 to 7 rows. Add 2 or 3 top-level options and a few child branches. Import it into the field and open the form preview. If the first list appears, the second list updates after a selection, and the values are saved in a test entry, the basic setup is working.
Do not start with your real catalog containing thousands of rows. Test a small CSV first. That lets you separate field structure issues from large-directory issues.
Preparing the CSV: Column Order, Duplicates, and Safe Import
It is best to design the CSV for Chained Selects around the user journey, not around the source database. If your internal table starts with a product ID, then category, then title, that does not mean the user should see the same order. In the form, the order should feel natural: first a broad anchor, then a refinement, then a specific option.
How to Choose the Right Level Order
A good order answers the question, "What does the user know first?" For a vehicle, that may be year, make, model. For a service, it might be department, task type, specific specialist. For a location, country, region, city. If you put an overly specific level first, the user ends up searching through a long list and the whole point of the cascade is lost.
Before importing, it helps to sketch the tree on paper or in a spreadsheet: top level, then branches, then final values. If the same end service appears in multiple branches, that is fine as long as it is truly available in multiple contexts. But if branches only exist because of inconsistent spelling, such as "Diagnostics" and " diagnostics," that is a data problem.
Which Duplicates Are Dangerous
Not all duplicates are bad. The same city can exist in different countries, and the same model can be produced in different years. The risky duplicates are those within the same level of the same branch, where the user sees two identical rows and has no idea how they differ. Hidden duplicates caused by spaces, capitalization, or lookalike characters are even worse.
Before exporting, sort the table by columns and review repeated groups. If the directory is large, use spreadsheet tools to trim spaces and find unique values. Do not do this directly on the live file without a backup: one bad bulk replacement can break the entire tree.
Importing into the Field and Saving the Form
Once the CSV is ready, open the Chained Selects field settings and upload the file into the choices import setting. After uploading, make sure to update the form. This is not just a formality: if you close the editor without saving, the field may not keep the new option set. Then open the preview and test several different branches, including one in the middle and one near the end of the list.
Display Settings: Horizontal, Vertical, and Hiding Inactive Lists
Once the CSV is imported, the form may already work, but the display settings determine how clear it feels to visitors. The field documentation includes specific appearance options: dropdown alignment and the ability to hide inactive lists until the previous level is selected. These settings look simple, but they have a major impact on usability.
Horizontal and Vertical Layout
A horizontal layout works well when there are only a few levels, labels are short, and the form sits in a wide page area. For example, a chain like "Year - Make - Model" reads well on one line on a desktop page. But if there are more than three levels, labels are long, or the form sits in a narrow column, the horizontal layout may start squeezing the fields.
A vertical layout is usually safer for mobile devices and long labels. The user moves from top to bottom, sees each list separately, and does not run into fields trying to fit into one row. For most service request, support, and education forms, the vertical option is easier to understand.
Hide or Show Inactive Lists
The Drop Down Display setting lets you hide subsequent dropdowns until the user has selected the previous level. If you enable hiding, the form looks shorter and feels less intimidating. That is useful for long chains and public pages, where every extra element reduces attention.
If you disable hiding, the user immediately sees that the selection includes several levels. That can be helpful for internal forms where staff already knows the structure. But on a public website, empty or inactive lists are sometimes perceived as a bug. That is why most public-facing forms use hidden inactive levels and briefly explain in the field description that the next list will appear after the previous selection is made.
How to Check Readability on the Page
Do not stop at the editor preview. Insert the form into a test page using the Gravity Forms block or the Embed Form flyout and check it inside the real site template. The theme, container width, button styles, and third-party script optimization can all affect behavior. Test the form in at least three states: before any selection, after the first-level selection, and after the chain is fully completed.
A good result: the visitor sees a clear field label, selects the first level, gets a relevant second list, completes the chain, and never runs into empty options with no explanation. If the form appears next to a notice, price, text field, or conditional block, make sure those elements do not jump around or break the layout when the next lists appear.
Practical Example: A Service Request Form with Entry Validation
Let us walk through an example that is easy to adapt for a service business site, a service catalog, or product support. The goal is to create a form where a visitor chooses a request category, task type, and specific service. After submission, the administrator should receive a structured entry, and the user should see a clear confirmation.
Goal and Preparation
We need a form called "Consultation Request." It will include a name field, an email field, a Chained Selects field, and a text field for describing the task. Before we begin, prepare a small CSV:
Direction,Task type,Service
Website,Setup,Gravity Forms configuration
Website,Setup,Form notifications audit
Website,Troubleshooting,JavaScript conflict check
Store,Product catalog,CSV structure review
Store,Support,Order form diagnostics
Education,Program,Course selection advice
This example is not meant to be copied as a production directory. It simply shows the principle: each row describes an allowed combination, and the column headers become the selection levels. On a non-English site, the values can be localized as long as you save the CSV with the correct encoding and test the result after import.
Setup Steps
- Create a new form in Gravity Forms and give it a working title, such as
Service Request. - Add the
Name,Email, Chained Selects, and task description fields. - Rename Chained Selects to a clear label, such as "What do you need help with?"
- Upload the CSV into the choices import setting for that field.
- Choose a vertical layout if the form will be used on a standard page with a responsive grid.
- Enable hiding inactive lists if you want to guide the visitor step by step.
- Save the form and open the preview.
After that, test several branches. Choose Website, then Troubleshooting, and make sure the final list only offers relevant options. Then switch to Store and verify that the options from the previous branch do not carry over.
Checking the Entry and Notification
Submit a test request. In the WordPress admin panel, open the Gravity Forms entry and confirm that the field saved the selected chain. Then review the admin notification. If the email uses a general merge tag, all values may appear together. If you need to display only one level, use the format for targeting a specific input inside the composite field as described in the field documentation.
Quick takeaway: the practical test is successful when the selection narrows correctly on the page, the chosen values are saved in the entry, and the notification gives the administrator enough information to process the request.
How to Maintain the Directory After the Form Goes Live
A cascading list is often configured once and then forgotten, even though it changes along with the business. A new service appears, an office relocates, the product line changes, managers start using a different category name, and the form gradually begins collecting less accurate data. That is why launch requires not just a CSV file, but also a simple maintenance process.
A good process has a clear owner for the directory. That may be the site administrator, the catalog manager, or a support specialist. That person decides which options appear in the form, who reviews new rows, and how quickly changes make it onto the site. Without that ownership, the CSV turns into a file that "someone imported at some point," and mistakes only surface after a user complains.
Versioning Without a Complex System
For a small site, a simple rule is enough: keep every imported CSV as a separate copy with a clear name. Inside the team, maintain a short log of what changed, why it changed, and who verified it. That is not a replacement for a real version control system, but it already makes rollback easier if a branch disappears or duplicates appear after an update.
Do not edit the only live file right before import without a copy. First save the current working version, then make changes in a new copy, test 5 to 10 typical branches, and only then import it. If the form is critical for lead intake, add a test form to the process: upload the new CSV there first, validate it on a public test page, and only then move it into the production form.
How to Validate CSV Changes
After every directory update, you do not need to manually test every possible combination. But you do need a set of control paths:
- The most popular branch that normally brings in the highest number of submissions.
- The new branch that was the reason for the update.
- A branch in the middle of the tree, to verify that sorting and duplicates did not break a child level.
- A less common branch that often breaks during bulk edits.
- A path with non-English characters, if the site uses localized values and the CSV is exported from different spreadsheet tools.
For each path, submit a test request and inspect the entry. If the form sends notifications to different departments, check the email too. A CSV change may look like a small text edit, but in processing terms it can mean a new service type, a new assignee, or a new routing branch.
What to Do with Old Values in Entries
Changing the CSV does not rewrite old entries. That is normal: past submissions should preserve the selection the user made at the time of submission. But it creates a reporting nuance. If you rename "Support" to "Help Desk," both values may appear in exports. Before renaming values, think about whether the old one should remain for historical consistency or whether it is better to add a new branch and keep the old one temporarily until current requests are closed.
If the data is sent to a CRM or spreadsheet, align naming before changing the form. Sometimes a user-friendly label is awkward for the internal system, while a technical code is awkward for the user. In that case, it is better to show clear wording in the form and handle internal routing in a separate integration instead of forcing visitors to see internal IDs.
Routing Requests Based on the Selected Chain
Once Chained Selects is configured, the next question is what to do with the selected chain. The field itself collects a structured choice, but the real value appears when that choice helps process the submission. For a small site, one administrator notification may be enough. For service, catalog, or education forms, you often need routing: different emails, different assignees, different confirmations, or different integration tags.
Gravity Forms already handles notifications, confirmations, and conditional logic. Chained Selects adds cleaner input data to that workflow. Instead of a freeform note like "I need help with a laptop," the administrator sees a path chosen from an allowed tree. That makes it easier to define processing rules without interpreting open text.
Notifications for Different Owners
If the selection branch determines the responsible team, you can set up multiple notifications and trigger them conditionally. For example, website service requests go to the webmaster, store requests go to the catalog manager, and education requests go to the program coordinator. The key is not to turn this into a fragile system with dozens of nearly identical rules. Start by identifying the highest level that truly changes the handling. In many cases, routing by the first or second column is enough, while keeping the full path in the email body.
The assignee email should be short and useful. Include the selected chain, contact details, task description, and a link to the entry in the admin area. If the email contains only the final option without its parent levels, the specialist may miss the context. If it dumps every form field without formatting, it wastes time. The best approach is a dedicated "User Selection" block that shows the chain in the correct order.
Confirmations for the User
The confirmation shown after form submission should not expose internal workflow details. The user only needs to know that the request was received and tied to the selected topic. For example: "We received your request for website support. A specialist will contact you after reviewing the details." Repeating the entire selection chain is only useful when the choice matters directly to the user, such as enrolling in a specific course or selecting a branch location.
If the form allows room for a wrong choice, add a calm note to the confirmation saying details can be clarified if needed. But do not shift quality control onto the user. The main job of Chained Selects is to reduce the chance of an invalid combination before the form is submitted.
Integrations and Reporting
When entries are passed downstream, validate the format in advance. Some systems work best with one string containing the full chain, while others prefer separate fields. If an integration is already in place, adding Chained Selects may require updating the field mapping. Do not publish the new form until you have tested how the data is transmitted.
For reporting, it is useful to preserve the level order. For example, "Category - Subcategory - Service" is easier to group than a list of values without column names. If managers build reports manually, give them a sample CSV export and explain what each column represents. That is a small piece of documentation, but it prevents many questions after launch.
Practical conclusion: field setup is not finished when the CSV is imported. It is only complete after you have verified routing, notifications, confirmations, and how the selected chain is used in real request handling.
Testing the Result on the Site, in Entries, and in Integrations
After setup, it is important to test not only the visual appearance of the field, but the full data path. A cascading list can look correct while still producing awkward values in email, exports, or integrations. That is why you should test the form as a small process: user input, field logic, entry storage, notification delivery, and downstream handling.
What to Check on the Public Page
Open the page with the form in normal front-end mode, not only in the admin area. Go through several branches and watch how it behaves:
- The first list loads immediately and does not show technical values instead of proper labels.
- The second list appears or updates after the first-level selection.
- When the first level changes, child values are reset or updated so the old incompatible combination does not remain selected.
- The form submits without validation errors when all required levels are selected.
- On mobile screens, the lists are not cut off and do not overflow the container.
If the form is embedded inside a popup, tab, accordion, or another hidden interface, spend more time testing it. Gravity Forms has separate guidance for forms loaded in hidden UI elements because scripts and element dimensions may behave differently when the form is not initially visible.
What to Check in the Entry
In the entry, not only the visible values matter, but also how usable they are afterward. Open several test submissions and see whether the user's selection is immediately clear. If the entry shows values that are too similar or the level order is confusing, go back to the column headers and the field labels.
If submissions are exported to CSV or sent to a CRM, review a test export. Sometimes the chain looks clear inside the site, but in a spreadsheet the manager only sees a list of values with no context. In that case, a clearer field label, a dedicated explanation in the notification, or better merge tag configuration can help.
What to Check in Notifications and Confirmations
The administrator notification should answer the question, "What should be done with this request?" If the chain identifies a service, the email should show the selected branch and contact details. The user confirmation does not have to repeat the full selection table, but it can briefly confirm that the request for the chosen category was received.
Do not overload the user with technical column names. If the internal CSV header is Service, the client-facing email is better off using a human phrase like "Selected service." Keep the technical labels in internal documentation for administrators.
Dynamic Choices Through Filters: When It Makes Sense
The standard path for Chained Selects is CSV. But in some projects, the directory changes so often that manual import becomes the weak point. For example, product models may update from an external system, the list of specialists may depend on schedules, or available locations may come from an internal database. For those cases, Gravity Forms documents filters that let you change choices programmatically or swap the import file.
This section is not necessary for every site. If the CSV is updated once a month, a manual process is usually simpler. If the data changes every day and a mistake could lead to a misrouted request, dynamic logic may be justified. But it should be implemented by a developer who understands WordPress hooks, caching, and error handling.
The Choices Filter and Caching
The documentation describes the gform_chained_selects_input_choices filter, which changes the choices in Chained Selects dropdowns. It also includes an important warning: the filter may not work correctly if the form page is cached. That is logical. If the page is served from cache, dynamic data and AJAX dependencies may be stale or may not update as expected.
That is why caching needs to be part of the plan before implementing a dynamic integration: exclude the form page from full-page caching, disable aggressive script optimization for Gravity Forms, and test behavior after clearing the cache. If the form is critical for lead intake, validate it on a separate page first and only then move it into production.
A Safe Example of Increasing the File Size Limit
The official documentation notes standard import limits: the number of unique values per column and the CSV file size can be changed with the gform_chainedselects_column_unique_values_limit and gform_chainedselects_max_file_size filters. Do not raise those limits "just in case." First optimize the table, remove duplicates, and confirm that the file is actually hitting the limit.
If you have a confirmed reason to increase the CSV size to 2 MB, you can add a small snippet through a child theme or the Code Snippets plugin. Before adding it, create a backup and test the code on a staging copy of the site.
add_filter( 'gform_chainedselects_max_file_size', 'site_chained_selects_csv_size' );
function site_chained_selects_csv_size( $size ) {
// Increase the limit only for a prepared directory CSV.
return 2000000;
}
After adding the code, try importing the file, save the form, and test several branches. If the site becomes slower or the import is still unstable, roll the snippet back and split the directory into more logical branches. Raising the limit does not replace a clean data structure.
When It Is Better Not to Write Code
Do not add PHP for convenience if a spreadsheet already solves the task. Code makes maintenance harder: it has to be updated, tested after plugin updates, and considered in caching behavior. For most sites, a well-prepared CSV, clear labels, and routine testing of the form after directory changes are enough.
Performance, Caching, and Theme Compatibility
Chained Selects runs inside a form, and the form depends on Gravity Forms scripts. That means common issues are not limited to the CSV. They also come from the page environment: caching, minification, deferred loading, JavaScript conflicts, a missing wp_footer() call in the theme, popup builders, and overly aggressive optimizers.
Caching on Pages with Forms
Gravity Forms documentation specifically explains why caching and script optimization can break dynamic forms. For a static page, caching is useful. For a form that reacts to user selections, validates nonces, sends AJAX requests, or uses conditional logic, caching can serve an outdated state. In the case of Chained Selects, this becomes especially noticeable when choices are populated programmatically or the form sits on a heavily optimized page.
A safe approach is to exclude the page with the important form from full-page caching, disable combining and repeated minification of Gravity Forms scripts, clear the cache, and test the form in a fresh browser window. If the issue disappears after optimization is disabled, do not turn those settings back on without adding targeted exclusions.
Themes and Page Builders
If the form does not display, some fields stay hidden, or the lists do not update, check the JavaScript console and the theme. Gravity Forms notes that with conditional logic, a form may initially be hidden with display:none and then shown by scripts. If the theme does not output wp_footer() or the page has a JavaScript error, the scripts may never finish their job.
For page builders and popup windows, it is best to create a separate test page with no extra effects. If Chained Selects works on a simple page but fails inside a popup, the issue is probably not the CSV. It is more likely related to when the form loads, deferred scripts, or a container that was hidden during initialization.
Large Directories
The documentation says CSV can support large datasets, but that does not mean every directory should be loaded in full. A large file is harder to validate, harder to maintain, and more likely to contain duplicates. As the table grows, think about whether the form can be split by use case, whether the number of levels can be reduced, whether rare options should move to a separate form, or whether it is time to switch to a programmatic data source.
For a public form, it is not only about the technical ability to load a CSV, but also about how fast the choice process feels. If the user goes through four levels and sees hundreds of options at each step, the form is still overloaded. In that case, the problem is not the plugin, but the structure of the directory.
Why Dependent Lists Stop Working and How to Find the Cause
It is best to troubleshoot from simple to complex: first the CSV, then the field settings, then the page with the form, then caching, and only after that any PHP filters. That keeps you from rewriting code because of an extra space in the table.
After Selecting the First Level, the Second List Is Empty
Symptom: the first list appears, but after a selection the next list has no options or the field looks inactive.
Possible cause: the CSV has no rows for the selected value, the values differ because of spacing or capitalization, or the file was not imported completely.
What to Check
- Find the selected value in the first CSV column and make sure it has child values next to it.
- Check for leading and trailing spaces in the cells.
- Create a small test CSV with the same branch and import it into a copy of the form.
How to fix it: clean the values, re-export the CSV, upload the file again, and update the form. If the issue started after the directory was expanded, temporarily return to the previous file and compare the structure.
Duplicate Options Appear
Symptom: the user sees two identical items in the same dropdown.
Possible cause: the values look identical but differ because of invisible characters, spaces, or capitalization. Another possibility is that you really defined two different branches with the same label and no clarification.
What to Check
- Sort the CSV by the problem column.
- Remove extra spaces and make sure capitalization is consistent.
- If duplicates are necessary, add clarification to the label so the user understands the difference.
How to fix it: standardize the names and re-import the file. If the duplicates come from business logic, it is better to redesign the selection tree than leave identical labels in place.
The Form Works in Preview but Breaks on the Live Page
Symptom: everything works correctly in the editor, but on the published page the lists do not open, do not update, or the form stays hidden.
Possible cause: the theme or optimizer is breaking JavaScript loading, the page is cached, the form sits inside a hidden container, or scripts are not being output correctly in the footer.
What to Check
- Open the form on a clean test page without a popup or a complex builder.
- Temporarily disable caching and script optimization for that page.
- Check the browser console for JavaScript errors.
- Make sure the theme outputs
wp_footer().
How to fix it: configure exclusions in the caching plugin or hosting layer, disable repeated minification of Gravity Forms scripts, and test for theme or plugin conflicts using the standard troubleshooting process. If the issue only happens in a popup, test how the form is initialized inside that popup.
The CSV Will Not Import or the Import Stops Partway Through
Symptom: the file will not upload, the import hangs, some options never appear, or the admin area shows an error.
Possible cause: the file is too large, contains too many unique values in one column, has broken encoding, or uses the wrong format. The Chained Selects changelog has included fixes related to CSV import, encoding, and PHP compatibility, so updates matter as well.
What to Check
- Save the file as a clean CSV with no formatting.
- Check UTF-8 encoding, especially if it contains non-English characters.
- Trim the test file down to 20 rows and try importing that.
- Check the current Gravity Forms, add-on, and PHP environment against the official documentation.
How to fix it: clean the CSV, split the directory, or carefully use the documented limit filters if the issue is specifically file size or the number of unique values. If the error remains after the environment is updated, it is better to contact support with a small reproducible CSV.
Dynamic Choices Do Not Update
Symptom: code using gform_chained_selects_input_choices is supposed to inject fresh options, but the user still sees stale data.
Possible cause: the page is cached, the external API response is cached too long, the code is not targeting the correct form ID, field ID, or input index, or the external source returned an error.
What to Check
- Disable page caching and clear the browser cache.
- Check that the hook is attached to the correct form and the correct field level.
- Add safe logging on a test site so you can inspect the data source response.
- If the external source is unavailable, make sure the code returns the original choices instead of breaking the field.
How to fix it: start by excluding the form page from cache. Then verify the hook targeting and add a fallback. If the dynamic logic is too fragile, go back to CSV or move the directory into a more stable internal data source.
SEO, Usability, and Security for Forms with Cascading Lists
Chained Selects does not directly improve search rankings or replace SEO plugins. Its impact is indirect: the form becomes easier to use, submissions become cleaner, users make fewer mistakes, and they reach the submit step faster. On a service page, that can improve the user journey, but you should not promise ranking gains because of a single field.
How to Keep the Form Clear for Users
Cascading lists can sometimes make a form feel too technical. The user sees several levels and does not understand why the next list is empty. The fix is simple: add a short field description. For example: "First choose a category, then narrow down the task type." Do not write a long instruction above every list. One sentence and clear column labels are enough.
If the form appears on a service page, do not hide important guidance only inside a placeholder. A placeholder disappears after selection and is not always accessible to every user. It is better to use the field label or the Gravity Forms description.
Accessibility Considerations
The add-on changelog includes updates related to sub-labels and accessibility. That is a good reason not to remove labels in the name of minimalism. Users with screen readers, keyboard navigation, and increased zoom should understand which selection level they are currently on. Test the form not only with a mouse, but also with a keyboard: moving through the lists, selecting a value, and submitting the form.
Data Security and CSV Access
If the CSV only contains public service options or city names, the risk is low. But if it includes internal IDs, confidential client names, personal data, or service codes, rethink the structure. The form should not expose unnecessary information to visitors. For sensitive data, it is better to show neutral public labels and keep internal mappings in protected processing logic rather than in visible lists.
Do not upload CSV files from random sources or copy directories without checking them. A mistake in one value can spread into dozens of submissions. After every directory update, submit a test entry and keep a copy of the file that was imported.
Questions About Setting Up Gravity Forms Chained Selects
Can Chained Selects Be Used Without a CSV?
The core working scenario is built around a CSV file. Developers can use documented filters to populate choices programmatically or pass an import file, but that is already a technical implementation. For most sites, it is safer to start with CSV.
Why Does the CSV Need Column Headers?
The headers define the foundation of the selection levels. The documentation clearly states that the first row with headers matters for each select. Without clear headers, it becomes harder to maintain the table and explain what each level represents.
Which Display Mode Is Better for a Mobile Page?
In most cases, a vertical layout with hidden inactive lists works best. That keeps the form from squeezing fields into one line and guides the user step by step. But the final choice should be tested on the real page template, not only in the editor preview.
Can the Field Be Used in Notifications and Confirmations?
Yes, the field value can be output through Gravity Forms merge tags. If you need to target a specific level inside the composite field, the documentation describes the dot notation format using the field ID and input number. After setup, be sure to submit a test entry and check the email.
What If the CSV Is Larger Than the Standard Limit?
Start by cleaning and optimizing the table: remove duplicates, extra spaces, and outdated branches. If the limit is genuinely a blocker, use the documented file size or unique value filters, but only through a safe code location and only after testing on a copy of the site.
Will the Field Work on a Cached Page?
A standard CSV scenario may still work, but dynamic forms and filters are sensitive to caching and script optimization. Official Gravity Forms documentation recommends disabling cache and optimization while diagnosing complex form issues, and excluding form pages from caching when it breaks behavior.
Is Chained Selects Suitable for a Very Large Product Catalog?
Technically, large CSV files are supported within documented limits and settings, but user experience matters more than file size. If the catalog is huge, consider a shorter tree, separate forms, or a dynamic data source. A cascading list should narrow the choice, not turn into a long navigation path through the entire catalog.
Can I Edit the Plugin Code to Change Its Behavior?
No, you should not modify the plugin files directly. Those changes will be lost on update and can introduce errors. Use the field settings, CSV preparation, documented filters, a child theme, or Code Snippets if a change is truly necessary and has been tested.
When Gravity Forms Chained Selects Is the Right Choice
Gravity Forms Chained Selects is a strong fit if you have a WordPress form with a large hierarchical selection and the options can be described cleanly in a CSV. The plugin helps reduce unnecessary options, prevent invalid combinations, and preserve cleaner data for request handling. It is especially useful on service sites, catalogs, educational programs, support flows, and product selection forms where each next choice depends on the previous one.
Before rolling it out in production, verify the Gravity Forms environment, prepare a small test CSV, configure the field display, place the form on a test page, and submit several test entries. If everything works in preview but fails on the live page, start with caching, script optimization, and theme conflicts. If the problem is in the data, go back to the CSV: column order, headers, spaces, and duplicates matter more than they may seem.
If you now understand the structure of your directory and are ready to test the form on a copy of the site, you can download the Gravity Forms Chained Selects package and build your first test cascading list. Do not publish the form directly on the live page right away. First make sure the selected values are saved in entries, included in notifications, and clear to the person who will be processing submissions.


