---
title: "WordPress"
description: "Paste a FormParcel form into a Custom HTML block or Elementor's HTML widget. Contact Form 7, WPForms and webhooks post from a server and are held in Spam."
url: "https://formparcel.live/docs/guides/wordpress"
---

# WordPress

Paste a FormParcel form into a Custom HTML block or Elementor's HTML widget. Contact Form 7, WPForms and webhooks post from a server and are held in Spam.

Untested: Not yet tested on a live site. The steps follow how the form address works today; if one differs, [tell us](https://formparcel.live/contact).

## Paste the form into a Custom HTML block

In the block editor, add a **Custom HTML** block where the form goes and paste this. The dashboard has the same code with your address filled in.

Example form address. Use yours from the dashboard.

```html title="Custom HTML block"
<form action="https://f.formparcel.live/f/f_k7QmXp2aVb9sTn4cLw8RhE" method="POST" onsubmit="if(!window.FormParcel){event.preventDefault();var f=this;f.setAttribute('data-fp-wait','1');setTimeout(function(){if(f.getAttribute('data-fp-wait')){f.removeAttribute('data-fp-wait');HTMLFormElement.prototype.submit.call(f)}},10000)}">
  <!-- Spam trap: people never see it, bots fill it in. Keep it hidden. -->
  <div aria-hidden="true" style="position:absolute;left:-10000px;">
    <input type="text" name="_gotcha" tabindex="-1" autocomplete="off">
  </div>

  <!-- Optional: send visitors to your own thank-you page. -->
  <input type="hidden" name="_next" value="https://your-site.example/thanks">

  <label for="name">Name</label>
  <input type="text" id="name" name="name" required>

  <label for="email">Email</label>
  <input type="email" id="email" name="email" required>

  <label for="message">Message</label>
  <textarea id="message" name="message" required></textarea>

  <button type="submit">Send</button>
</form>
<!-- FormParcel bot check: no cookies, no widget. Without it, submissions wait in your Spam folder. -->
<script src="https://f.formparcel.live/f/formparcel.js" async></script>
```

- Set `_next` to the full address of a thank-you page on the same site, or delete that line to show FormParcel’s short confirmation.
- Keep the hidden `_gotcha` field and the script line after the form.
- In Elementor, paste the same code into an **HTML** widget.

> **Bot check.** A lead sent without FormParcel's bot check is saved but held in your Spam folder, not delivered. That is every post from a server, a webhook or `curl`, and every post from a page that does not load the script. The dashboard then shows **Bot check not installed** under Needs action. Fix: keep the script line on every page that has the form. [Learn more](https://formparcel.live/docs/reference/bot-check)

## Form plugins

A plugin form sends its data to WordPress first. Some plugins can then forward it to a webhook, but that post comes from your server, so it carries no bot-check proof and FormParcel holds it in Spam.

| Plugin | Posts to an outside address from the browser | Use instead |
| --- | --- | --- |
| Contact Form 7 | No. A webhook plugin can forward it, from the server. | A Custom HTML block |
| WPForms | No. The Webhooks addon forwards it, from the server. | A Custom HTML block |
| Elementor Pro Form | No. Its Webhook action posts from the server. | Elementor’s HTML widget |

- **Server key for webhooks and server posts** Coming soon: A per-form key for a site builder's webhook or your own server, so a lead posted from a server is delivered instead of held in Spam. Until it ships, use the Custom HTML block.

## Who can save form markup

WordPress may strip `form`, `input` and `script` tags when someone without the right capability saves the page. If the form or the script line disappears, save it with an administrator account.

## Check it

Submit the form once from the live page and open its receipt under **Leads**. If nothing arrives, see [Troubleshooting](https://formparcel.live/docs/help/troubleshooting).
