Appearance
Post Submission Actions
Voxel's Create Post form shows a success screen when someone submits a listing, and that's where it stops. This function lets you do something afterwards: send them somewhere else, message them, or push the submission to another system.
Actions are configured on the Create Post (VX) widget itself, so two forms for the same post type can behave differently.
Overview
Key Features
- Redirect after submission, with dynamic tags
- Send a Voxel direct message
- POST the submission to a webhook, optionally signed
- Each action can run on creation only, on edits only, or every time
- Multiple actions per form
- Never blocks or delays a submission
Setup Instructions
Step 1: Enable the Function
- Navigate to Voxel Toolkit → Functions
- Find Post Submission Actions and toggle it on
- Click Save Changes
Step 2: Configure the Widget
- Edit the page containing your Create Post (VX) widget in Elementor
- Select the widget and open Content → Submission Actions (VT)
- Turn on Enable submission actions
- Add an action and choose its type
Actions
Redirect
Sends the visitor somewhere once their submission is saved.
| Setting | Description |
|---|---|
| Redirect to | The destination URL. Dynamic tags work here |
Use @post(permalink) to send someone straight to the listing they just created, or a fixed URL for a thank-you page.
If more than one redirect action applies, the last one configured wins — only one redirect can happen.
Send Voxel message
Sends a direct message through Voxel's own messaging system, so it appears in the normal inbox.
| Setting | Description |
|---|---|
| Message from | Site admin, or the person submitting |
| Message to | The person submitting, the site admin, or a specific user |
| User ID | Which user, when sending to a specific user |
| Message | The message body. Dynamic tags work here |
Because it uses Voxel's own pipeline, user blocks, content sanitisation, inbox state and notification throttling all behave exactly as they would for a message sent by hand. A message from someone to themselves is skipped.
Send webhook
POSTs the submission to another system as JSON — useful for Zapier, Make, n8n, or your own endpoint.
| Setting | Description |
|---|---|
| Webhook URL | Where to send the request |
| Shared secret | Optional. Signs the request so the receiver can verify it |
The payload contains the event type, and the post's ID, title, status, post type, permalink, author and every field value.
json
{
"event": "post_created",
"post": {
"id": 1234,
"title": "The Balanced Table",
"status": "publish",
"post_type": "places",
"permalink": "https://example.com/places/the-balanced-table/",
"author": 12,
"fields": { "phone": "+15551234567" }
},
"site": "https://example.com/",
"sent_at": "2026-08-05T22:00:00+00:00"
}When a shared secret is set, the request carries an X-VT-Signature header — an HMAC-SHA256 of the request body, prefixed with sha256=. Recomputing it on your end with the same secret proves the request came from your site and wasn't altered.
Private addresses are refused
Webhooks go through WordPress's safe HTTP client, which refuses loopback and private network addresses. A webhook URL cannot be used to make your server probe its own network.
Run When
Every action has a Run when setting:
| Option | Runs |
|---|---|
| A post is first created | Only on the first submission |
| An existing post is edited | Only when editing something that already exists |
| Every submission | Both |
Configuration Is Read From the Widget
The browser tells the site that a submission finished; it does not tell it what to do. The action configuration is read back from the Elementor widget on the server.
That matters for security: a crafted request cannot nominate its own webhook URL, message recipient or redirect target. The site also confirms the requester is someone who could have made that submission.
Actions Cannot Break a Submission
Everything here runs after the post has been saved. No action can reject, delay or fail a submission — if a webhook is unreachable or a message can't be delivered, the post is still saved and the visitor still sees the success screen.
Troubleshooting
Nothing happens after submitting. Check the function is enabled and Enable submission actions is on for that specific widget. Actions are per widget, not per post type.
The redirect doesn't fire. Check the Run when setting — an action set to "first created" won't run when editing.
The message wasn't sent. A message from someone to themselves is skipped. Check the sender and recipient aren't the same user — this happens when the post author is also the site admin.
The webhook didn't arrive. Private and loopback addresses are refused, as are URLs whose host doesn't resolve. Test with a publicly reachable endpoint.

