Chained Select Enhancer for Gravity Forms WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
Chained Select Enhancer for Gravity Forms
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/guilamu/gf-chained-select-enhancer/releases/download/v2.2.3/gf-chained-select-enhancer.zipEnhances Gravity Forms Chained Selects with auto-select, left-aligned labels, column sections, XLSX import, and CSV export.
Field Behavior
- Choose auto-select when a chained select level has only one available option and optionally make that field read-only
- Keep auto-selected read-only chained-select levels in the submitted form payload so validation still receives their values
- Configure display and data options directly in the Gravity Forms editor for existing Chained Select fields
- Match backend preview and frontend rendering for left-positioned sub-labels and grouped sections
Layout & Visibility
- Set vertical chained selects to full width when long values need more room
- Show the full currently selected value in a native tooltip when long chained select content is truncated
- Group related columns into titled frontend sections from the field settings panel
- Display consecutive sections side by side from the field settings panel with matching backend and frontend layout
- Hide unwanted columns while keeping the chained select data structure intact
- Keep hidden intermediate chained-select columns in the correct runtime order so downstream levels still resolve
Import & Export
- Import chained select choices from CSV or XLSX files generated by Excel, LibreOffice, or Google Sheets
- Preserve intermediate blank import columns so later chained-select levels do not shift left
- Generate CSV exports of every available chained select combination from the field settings panel
- Extend the existing Chained Selects add-on workflow without replacing the source plugin
Performance
- Cache rendered chained-select choice trees on the frontend to avoid unnecessary per-level AJAX requests when possible
- Fall back to the native Gravity Forms Chained Selects AJAX flow automatically when a local cache branch is incomplete
Key Features
- Gravity Forms Editor: Configure auto-select, column visibility, sections, and layout from the field settings panel
- Multilingual: Works with content in any language
- Translation-Ready: All strings are internationalized
- Secure: Uses nonce verification, capability checks, escaped output, and sanitized CSV/XLSX handling
- GitHub Updates: Automatic updates from GitHub releases
Requirements
- Gravity Forms 2.5 or higher
- Gravity Forms Chained Selects Add-On
- PHP ZipArchive extension for XLSX import
- WordPress 5.8 or higher
- PHP 7.4 or higher
Installation
- Upload the
gf-chained-select-enhancerfolder to/wp-content/plugins/ - Activate the plugin through the Plugins menu in WordPress
- Go to Forms → Your Form and add or edit a Chained Select field
- Upload a CSV or XLSX source file if you want to import choices
- Configure auto-select, layout, sections, and export options from the field settings panel
FAQ
How do I enable auto-select?
In the form editor, select your Chained Select field. In the field settings panel, check "Automatically select when only one option is available". You can also enable the read-only option right below it to lock fields that have only one available choice.
How do I place labels on the left or create sections?
In the field editor, choose "To the left of the field" for sub-label placement. Use "Manage Columns" to create titled sections and organize the columns shown on the frontend. Section headers intentionally stay focused on the title and actions, without showing present/hidden column counters. Use the side-by-side button on a section header to display that section next to the following one.
How do I hide columns?
In the field settings, use the toggle switches under "Hide Columns" to show/hide specific columns. Hidden columns are still processed but not displayed to users.
How do I export choices to CSV?
Select your Chained Select field in the form editor. Click the "Export Choices" button in the field settings panel. The CSV will download automatically.
Can I increase the unique value limit for imports?
Yes. The enhancer respects the gform_chainedselects_column_unique_values_limit filter used during CSV and XLSX imports:
add_filter( 'gform_chainedselects_column_unique_values_limit', function ( $limit ) {
return 10000;
} );
Project Structure
.
├── gf-chained-select-enhancer.php # Main plugin bootstrap
├── README.md # Plugin documentation
├── assets
│ ├── css
│ │ ├── admin.css # Form editor and manager styles
│ │ └── frontend.css # Frontend layout and section styles
│ └── js
│ ├── admin.js # Form editor settings and preview scripts
│ └── frontend.js # Frontend chained select behavior enhancements
├── includes
│ ├── class-gf-chained-select-enhancer.php # Main enhancer functionality
│ ├── class-github-updater.php # GitHub auto-updates
│ ├── class-import-handler.php # CSV and XLSX import processing
│ ├── class-xlsx-parser.php # XLSX parsing helpers
│ └── Parsedown.php # Markdown parser for plugin details modal
└── languages
├── gf-chained-select-enhancer-fr_FR.mo # French translation (binary)
├── gf-chained-select-enhancer-fr_FR.po # French translation (source)
└── gf-chained-select-enhancer.pot # Translation template
Changelog
2.2.0 - 2026-08-14
- Fixed: A blank first line in a CSV or XLSX no longer becomes the header row, which silently truncated the import to a single column
- Fixed: XLSX files whose first worksheet is not
sheet1.xmlnow import correctly — the sheet is resolved through the workbook relationships instead of being assumed (affected files exported by LibreOffice, Google Sheets, and workbooks with reordered or deleted sheets) - Fixed: XLSX cells that omit the optional
rcell-reference attribute no longer collapse an entire row onto its first column - Fixed: Exported CSV files now start with a UTF-8 BOM so accented values open correctly in Excel instead of being mangled
- Fixed: The "No value" fallback now resolves the preceding column correctly on fields with nine or more columns, where Gravity Forms skips input indices that are multiples of ten
- Fixed: The wrong-file-type message in the form editor now mentions CSV and XLSX; the previous implementation hooked a filter the Chained Selects add-on never applies, so the override never took effect
- Fixed: The form editor script no longer throws when
fieldSettings.chainedselecthas not been registered yet, which aborted the rest of the inline setup - Fixed: The frontend choice cache is now actually delivered to the page. Gravity Forms renders forms through
gform_pre_renderbeforewp_enqueue_scriptsruns and caches the result, so the inline data had nothing to attach to and the cache never shipped — every chained select fell back to a server round trip on each column. The data is now held and flushed once the script is registered - Improved: Choice export streams row by row instead of building the entire expanded combination set in memory first, so large fields no longer exhaust memory
- Improved: Frontend script exits immediately on pages with no chained select instead of polling for six seconds, and the jQuery
$.postinterception is only installed when a chained select is actually present - Improved: Failed GitHub update checks are cached for 30 minutes, so a rate-limited or unreachable API no longer retries a 15-second request on every admin page load
- Security: Capability and nonce checks now run before the uploaded file is opened and parsed
- Security: The XLSX parser restores libxml global state after parsing instead of leaving entity loading and error handling altered for the rest of the request
- Fixed: The per-column unique value limit is now measured on the sanitized values that actually reach the choice tree, so whitespace variants no longer inflate the count
2.1.5 - 2026-08-14
- Fixed: CSV import (
gform_post_multifile_uploadhandler) no longer triggers a PHP 8.4+ deprecation notice forfgetcsv()/str_getcsv()missing the$escapeparameter, which could break the AJAX import response whendisplay_errorsis on - Fixed: CSV export now passes an explicit
$escapeparameter tofputcsv()for the same PHP 8.4+ compatibility, and to keep export/import parsing symmetric with GF Chained Selects 1.8.2
2.1.4 - 2026-06-05
- Security: Imported choice values are now sanitized with
sanitize_text_fieldinstead ofwp_kses('post'), closing an XSS surface on crafted CSV/XLSX payloads - Security: Removed the contradictory
LIBXML_NOENTflag from the XLSX parser so XXE protection is no longer weakened on PHP 8.0+ - Fixed: Error messages during file upload now use the plugin's own text domain instead of
gravityforms, so translations are picked up correctly - Fixed: The
fieldSettings.chainedselecteditor registration no longer accumulates duplicate entries on repeated editor opens - Improved: Admin CSS and JS are now loaded only on Gravity Forms screens instead of every admin page
- Improved: The inline footer CSS for hidden columns and full-width fields is now deduplicated into a single `
Releases
Newest 25 of 36 recorded releases. Each count is every asset in that release; expand a row for the breakdown.
Active-site estimate ≈10 comes from the median of recent superseded releases. Method.