WordPress contact forms
without plugin sprawl.
Use a Custom HTML block or theme template that posts to Form Plume. Skip PHP mail, SMTP plugins, custom tables, and fragile shortcode stacks while keeping email, storage, spam filtering, uploads, and integrations.
<!-- WordPress Custom HTML block -->
<form action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE" method="POST">
<p>
<label for="wp-name">Name</label>
<input id="wp-name" name="name" autocomplete="name" required>
</p>
<p>
<label for="wp-email">Email</label>
<input id="wp-email" type="email" name="email" autocomplete="email" required>
</p>
<p>
<label for="wp-message">Message</label>
<textarea id="wp-message" name="message" rows="5" required></textarea>
</p>
<button type="submit">Send</button>
</form>The full guide
A plugin-free backend for WordPress forms.
Add a plain WordPress form that posts to Form Plume, avoid PHP mail failures, and keep page builders, theme templates, uploads, and cache plugins predictable.
- 1Create your Form Plume accountStart free and give your WordPress form a hosted endpoint for email, submissions, spam filtering, uploads, integrations, and webhooks.Start free
- 2Create the form and copy the endpointCopy the endpoint URL from Form Plume. It looks like
https://api.formplume.com/f/your-slug - 3Connect it inside WordPressPaste the endpoint into a Custom HTML block, a theme template, or the HTML area of your page builder. Open the published WordPress page, submit once, and confirm the message appears in Form Plume and email.
You can use this AI prompt to hand the platform-specific wiring to an assistant without accidentally creating a backend.
Build it without a form plugin
WordPress contact forms often turn into a stack of plugins, SMTP settings, database tables, and theme-specific shortcodes. Form Plume gives you a simpler option: use a normal HTML form and send it to a hosted endpoint.
The best starting point is a Custom HTML block in the page editor. Paste the form markup, replace the placeholder endpoint, publish, and submit one test message.
<form action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE" method="POST">
<label for="contact-name">Name</label>
<input id="contact-name" name="name" autocomplete="name" required>
<label for="contact-email">Email</label>
<input id="contact-email" type="email" name="email" autocomplete="email" required>
<label for="contact-message">Message</label>
<textarea id="contact-message" name="message" rows="5" required></textarea>
<button type="submit">Send message</button>
</form>Form Plume receives the submission, sends the email notification, keeps a dashboard copy, filters spam, and can forward accepted leads to integrations or signed webhooks.
Use a theme template when the form is global
If the same contact form appears across many pages, put the markup in a theme template part instead of duplicating Custom HTML blocks. Keep the endpoint in one place and let WordPress render the final HTML.
This works well for block themes, classic themes, and child themes. The important part is the rendered output: a real <form> with action, method="POST", and named fields.
Use a child theme or site-specific template area for code you plan to keep. Editing a vendor theme directly can be overwritten by updates.
Page builders and shortcodes need a quick check
Elementor, Beaver Builder, Divi, and shortcode-driven form plugins may sanitize or rewrite form attributes. If a builder strips the custom action, hidden fields, or enctype, use a raw HTML widget or template instead.
Avoid using a plugin only to send email if Form Plume is already handling delivery. A plugin can still be useful for layout, but it should not require PHP mail, SMTP credentials, or a local submissions table just to receive a message.
Do not depend on PHP mail
The common WordPress failure mode is not the form markup. It is mail delivery. wp_mail() and PHP mail can silently fail, land in spam, or depend on hosting configuration you do not control.
With Form Plume, WordPress serves the page and Form Plume owns the backend path: email notifications, dashboard storage, spam filtering, file storage, integrations, and webhooks.
Add uploads carefully
For resumes, screenshots, or project briefs, add enctype="multipart/form-data" and a named file input.
<form
action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
method="POST"
enctype="multipart/form-data"
>
<input type="file" name="attachment" accept=".pdf,.doc,.docx,.png,.jpg">
<button type="submit">Send file</button>
</form>Do not store sensitive uploads in the WordPress media library just to pass them through a contact form. Let the hosted form backend handle file storage and notification links.
Test after cache and optimization plugins
Publish the page, clear any cache plugin, and test from a logged-out browser window. Then confirm the Form Plume dashboard entry, email notification, redirect behavior, and any integrations.
If a cache or optimization plugin minifies the form in a way that changes attributes, exclude the contact page or move the form into a safer template area.
Primary sources
FAQ
WordPress form questions
before you install another plugin.
One line. Zero backend.
