Go Back to Parent Doc

Entries & Storage

With Store submissions on in the Form block (it is by default), every valid submission is saved in your own WordPress database and appears under Forming → Entries. Nothing is sent to an external service.

The Entries inbox

Go to Forming → Entries. New entries are marked unread, and the unread count shows on the Forming menu and the Entries submenu.

  • Search entries looks inside the answers, so you can find a submission by name, email or any word in a message.
  • Filter by form, or by status: All entries, Unread, Read, Starred or Trash.
  • Star important entries to find them again quickly.
  • Bulk actions: select entries to mark them read or unread, star or unstar them, move them to the trash, restore them or (from the trash) delete them permanently.
  • Each row shows the date, the form, the page it came from and a preview of the first answers.

A single entry

Click an entry to open it. It’s marked as read, and you see:

  • Every answer with its label, as it was when the entry was submitted. Editing the form later doesn’t change how old entries read.
  • The form, the page it was submitted from, the date and the logged-in user (if any).
  • The IP address and browser, if you turned that on under Settings → Data & privacy.
  • Newer entry and Older entry buttons to move through the same form’s entries.
  • Print, Mark as unread, Star and Move to trash.

Choice answers show their labels, a single checkbox reads “Yes”, and Pro fields show readable values.

CSV export

On Forming → Forms, choose Export entries (CSV) for a form. Optionally pick a From and To date, then click Download CSV. The file has one row per entry and one column per field, after the entry ID, date and source page, and opens in Excel, Google Sheets or Numbers.

Values a spreadsheet would run as formulas (starting with =, +, - or @) are neutralized, so a malicious answer can’t execute in someone’s spreadsheet.

Privacy and GDPR

Entries can contain personal data. Forming gives you the tools to handle it:

  • Personal data export and erasure: entries are included in WordPress’s Tools → Export Personal Data and Tools → Erase Personal Data, matched by any field equal to the person’s email address.
  • Automatic deletion: under Forming → Settings → Data & privacy, set Delete entries after (days). A daily task removes older entries. 0 keeps entries forever.
  • IP and browser: Store IP address and browser with each entry is off by default. Turn it on only if you need it.
  • Privacy policy text: suggested text is added to Settings → Privacy → Policy guide.
  • Don’t store at all: turn off Store submissions on a form if the email is all you need.
  • Uninstall: entries are kept when the plugin is deleted unless Delete all entries and settings when the plugin is deleted is on.

Turning storage off

Switch off Store submissions in the Form block’s Storage panel and nothing is written to the database. The notification email still sends. Turning it off doesn’t delete entries that were already saved.

How entries are stored

Each submission becomes one post of the forming_entry post type:

PropertyValue
Post typeforming_entry
Post statuspublish, or trash once trashed
VisibilityPrivate: not public, not queryable on the front end, excluded from search and the core REST API

Because entries are ordinary posts, they’re backed up with your database and readable with WP_Query and get_post_meta().

Meta keyValue
_forming_form_idThe form’s ID
_forming_source_idID of the page the form was submitted from
_forming_sourceSigned reference to the content the form lives in
_forming_fieldsSnapshot of the fields (name, label, type, options) at submission time
_forming_user_idThe logged-in submitter, if any
_forming_read, _forming_starredRead and starred flags
_forming_ip, _forming_user_agentOnly when IP storage is on
forming_field_{name}One value per field, using the field’s Name (an array for multiple choices)

So a field named email is stored as forming_field_email. Choice fields store their value, not their label.

Reading entries in code

$entries = get_posts(
	array(
		'post_type'      => 'forming_entry',
		'posts_per_page' => 20,
		'meta_key'       => '_forming_form_id',
		'meta_value'     => 'abc123def456', // The form ID, for one form only.
	)
);

foreach ( $entries as $entry ) {
	$email   = get_post_meta( $entry->ID, 'forming_field_email', true );
	$message = get_post_meta( $entry->ID, 'forming_field_message', true );
}

To react to submissions as they happen instead, hook forming_submission_saved or forming_entry_created. See the Developer Reference.

Shopping Cart
  • Your cart is empty.