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-entry-reassign/releases/download/v1.0.0/gf-entry-reassign.zipReassign Gravity Forms entries from one user account to another: one entry, a selection, or every entry of an account.
Three Ways to Reassign
- One entry: a Reassign panel next to the standard Gravity Forms Entry panel on the entry detail page
- A selection: a Reassign to an account bulk action on the entry list, working on ticked rows or on every entry matching the current filter
- A whole account: a Forms → Reassign Entries page that moves every entry of one account to another, across all forms
- Any of the three can instead remove the account, turning entries into guest entries exactly as Gravity Forms records them for logged-out submissions
- Every reassignment writes an entry note recording the previous account, the new account, and who made the change
Searchable Account Picker
- Type-ahead search across display name, login, nickname and email address
- Built for large user bases: accounts are fetched on demand, never rendered into a 1300-option dropdown
- Returns the 20 best matches per search, from 2 characters onwards
- Full keyboard support: arrow keys to browse, Enter to pick, Escape to close
- The account an entry already belongs to appears in the list but is marked and cannot be selected
Built for Large Accounts
- The bulk page counts an account's entries before you commit, and asks for confirmation naming both accounts
- Entries are processed in server-side batches of 100 with a live progress bar, so an account with thousands of entries never times out
- Trashed and spam entries are included, so an account's history is never split between two owners
- Processing stops and reports rather than looping when entries cannot be updated
Key Features
- Built for scale: AJAX-backed search and batched processing keep every screen responsive whatever the number of accounts and entries.
- Auditable: every reassignment is logged as a Gravity Forms entry note.
- Multilingual: searches and displays accounts in any language or script.
- Translation-Ready: all strings are internationalized; French translation included.
- Secure: capability check on
gravityforms_edit_entries, per-entry and per-screen nonces, and sanitized input on every request. - GitHub Updates: automatic updates from GitHub releases.
Requirements
- Gravity Forms 2.5 or higher
- WordPress 5.8 or higher
- PHP 7.4 or higher
Installation
- Upload the
gf-entry-reassignfolder to/wp-content/plugins/ - Activate the plugin through the Plugins menu in WordPress
- Open any entry under Forms → Entries to use the Reassign panel, or go to Forms → Reassign Entries to move a whole account
FAQ
Who can reassign entries?
Any user with the Gravity Forms gravityforms_edit_entries capability. Restrict it further with the gf_entry_reassign_user_can_reassign filter:
add_filter( 'gf_entry_reassign_user_can_reassign', function( $can ) {
return current_user_can( 'manage_options' );
} );
Can I limit which accounts entries can be moved to?
Yes, filter the WP_User_Query arguments used by the picker:
add_filter( 'gf_entry_reassign_search_query_args', function( $args, $term ) {
$args['role__in'] = array( 'subscriber' );
return $args;
}, 10, 2 );
Can I run my own code after a reassignment?
Yes, hook gf_entry_reassign_after_reassign. It fires once per entry, including during bulk operations:
add_action( 'gf_entry_reassign_after_reassign', function( $entry_id, $new_user_id, $previous_owner_id ) {
// Notify the new owner, sync a CRM, …
}, 10, 3 );
Can I skip the entry notes when moving thousands of entries?
Yes, return false from gf_entry_reassign_add_note. Notes are the audit trail, so only disable them deliberately:
add_filter( 'gf_entry_reassign_add_note', '__return_false' );
Does it change the entry data itself?
No. Only the entry's created_by property changes. Field values, notes, payment data and the submission date are untouched.
The panel does not appear on the entry page
The panel is only rendered for users who can edit entries, and only in view mode — not while editing an entry. Save or cancel the edit and the panel comes back.
Project Structure
.
├── gf-entry-reassign.php # Main plugin file, bootstrap and dependency checks
├── README.md
├── admin
│ ├── css
│ │ └── admin.css # Styles for the meta box, bulk page and modal
│ └── js
│ ├── account-picker.js # Reusable type-ahead account picker
│ ├── bulk-page.js # Batched processing and progress bar
│ ├── entry-detail.js # Reassign meta box behaviour
│ └── entry-list.js # Bulk action modal on the entry list
├── includes
│ ├── class-gf-entry-reassign-service.php # Shared lookup, reassignment and audit logic
│ ├── class-gf-entry-reassign-assets.php # Shared assets, picker markup, search endpoint
│ ├── class-gf-entry-reassign-entry-detail.php # "Reassign" meta box
│ ├── class-gf-entry-reassign-entry-list.php # Entry list bulk action
│ ├── class-gf-entry-reassign-bulk-page.php # Forms → Reassign Entries page
│ ├── class-github-updater.php # GitHub auto-updates
│ └── Parsedown.php # Markdown parser for the View details popup
└── languages
├── gf-entry-reassign-fr_FR.mo # French translation (binary)
├── gf-entry-reassign-fr_FR.po # French translation (source)
└── gf-entry-reassign.pot # Translation template
Changelog
1.0.0 - 2026-08-28
- Initial release
- New: "Reassign" meta box on the Gravity Forms entry detail page
- New: Reassign to an account bulk action on the entry list, working on ticked rows or on every entry matching the current filter
- New: Forms → Reassign Entries page moving every entry of one account to another, across all forms, in batches with a progress bar
- New: Remove the account from an entry, turning it into a guest entry, from all three screens
- New: Type-ahead account search over display name, login, nickname and email, designed for sites with thousands of accounts
- New: Automatic entry note recording each reassignment
- New:
gf_entry_reassign_user_can_reassignandgf_entry_reassign_search_query_argsfilters,gf_entry_reassign_after_reassignaction,gf_entry_reassign_add_notefilter to skip entry notes on very large operations - New: French translation
Security
If you discover a security vulnerability in this plugin, please report it responsibly through GitHub Security Advisories. Do not open a public issue for security reports.
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
For translations, the plugin uses WordPress i18n. You can contribute translations by editing the .po files in the languages/ directory and generating the corresponding .mo files with the wp i18n CLI commands.
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) — see the LICENSE file for details.
Made with love for the WordPress community
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.