Actions Overview
Actions are the automation layer of Core Forms. When a form is submitted successfully, one or more actions fire to process the submission data -- sending emails, subscribing to newsletters, posting to Slack, creating CRM contacts, and more.
How Actions Work
- A user configures actions in the Actions tab of the form editor.
- Each action has a type (e.g.,
email,webhook,slack) and its own settings. - On successful submission, Core Forms fires the
cf_form_successhook. - Each configured action is dispatched via
do_action( "cf_process_form_action_{$type}", $settings, $submission, $form ).
Actions only fire for legitimate submissions. Spam submissions are stored but never trigger actions.
Built-in Actions
Available actions include:
| Action | Class | Description |
|---|---|---|
email |
Email |
Send email notification |
autoresponder |
AutoResponder |
Auto-reply to submitter |
webhook |
(extension) | POST data to external URL |
mailchimp |
MailChimp |
Subscribe to Mailchimp list |
mailerlite |
MailerLite |
Add to MailerLite group |
convertkit |
ConvertKit |
Add to ConvertKit form |
drip |
Drip |
Add to Drip campaign |
brevo |
Brevo |
Add to Brevo (Sendinblue) list |
activecampaign |
ActiveCampaign |
Add to ActiveCampaign list |
fluentcrm |
FluentCRM |
Add to FluentCRM list |
hubspot |
HubSpot |
Create HubSpot contact |
slack |
Slack |
Post message to Slack channel |
discord |
Discord |
Post message to Discord webhook |
telegram |
Telegram |
Send Telegram message |
twilio_sms |
TwilioSms |
Send SMS via Twilio |
google_sheets |
GoogleSheets |
Append row to Google Sheet |
airtable |
Airtable |
Create Airtable record |
notion |
Notion |
Create Notion page |
zapier |
Zapier |
Trigger Zapier webhook |
make |
Make |
Trigger Make (Integromat) scenario |
create_post |
CreatePost |
Create a WordPress post |
create_user |
CreateUser |
Register a WordPress user |
create_article |
CreateArticle |
Create a custom article post |
emailit |
Emailit |
Send email via Emailit API |
emailit_subscribe |
EmailitSubscribe |
Subscribe via Emailit |
mailerpress |
MailerPress |
Subscribe via MailerPress |
fluent_community |
FluentCommunity |
Add to Fluent Community |
Copy actions from an existing form
Site administrators can reuse saved actions without rebuilding their settings:
- Open the destination form's Actions tab.
- Select Import Actions beside Active Actions, then search for a source form in the popover.
- Choose the source form, then select the individual actions to copy.
- Select Import selected actions. The copies are appended to your current editor; existing actions remain in place.
- Review recipients, connections, field variables, conditions and background-processing settings. A warning identifies field references that are absent from the destination form.
- Save the form when the copied actions are ready.
The source form stays unchanged. Each copy gets its own action identity, and copying does not execute an action. Connection credentials are included in the selected settings, which is why cross-form copying requires administrator access. If a source action changes while you are selecting it, reload that source selection before copying. Unavailable integrations must be restored before they can be copied.
Setup guide links in the action cards open the relevant documentation in a new tab. Actions without a dedicated guide link to this overview.
Conditional Actions
Each action supports conditions that control whether it fires. Conditions evaluate against submission data:
// Example action settings with a condition
$action = [
'type' => 'email',
'to' => 'sales@example.com',
'subject' => 'New lead',
'message' => '[all:label]',
'conditions' => [
[
'field' => 'department',
'operator' => 'equals',
'value' => 'sales',
],
],
];
Multiple Actions Per Form
Forms can have any number of actions. They execute in the order they appear in the Actions tab. Each action is independent -- if one fails, the others still run.
Custom Actions
You can create custom actions by extending the Action base class. See Custom Actions for a full guide.
use Core_Forms\Actions\Action;
use Core_Forms\Form;
use Core_Forms\Submission;
class MyCustomAction extends Action {
public $type = 'my_custom';
public $label = 'My Custom Action';
public function page_settings( $settings, $index ) {
// Render admin settings fields
}
public function process( array $settings, Submission $submission, Form $form ) {
// Process the submission
}
}
// Register it
$action = new MyCustomAction();
$action->hook();
Action Lifecycle
Form submitted
-> Validation passes
-> Submission saved to database
-> cf_submission_inserted fires
-> cf_form_success fires
-> Each configured action's process() method is called
-> ActionLogger records success/failure per action
-> JSON response returned to browser
Related
Insert and Copy Form Fields
Action inputs that accept form values have a compact Insert field control. Search by the field's label or name, then select a result. The picker inserts [field_name] at the cursor for message and text settings, quotes tokens appropriately in JSON mappings, and inserts raw names for field mappings and exposed-field lists.
Field mappings and option settings use bounded, searchable in-page choosers. For Fields to expose, select several fields before choosing Done; clicking a selected field removes it. The copy icon beside an option copies that option's exact token or name. The copy icon beside an input copies its current value.
Available-variable chips use the same insert/copy split for form fields and system variables. Focus a compatible action input before inserting a variable. Connection credentials, static IDs and literal comparison values remain ordinary settings; a field token would not resolve there.
Keyboard users can search, move through results with arrow keys, activate a result with Enter, and close the chooser with Escape. Required mappings still need a selection before the form can save.