Contact Form 7
Automatically create WPsigner documents when a Contact Form 7 form is submitted.
Requirements
Section titled “Requirements”| Requirement | Version |
|---|---|
| WPsigner | 2.1.0+ |
| Contact Form 7 | 5.0+ |
| WordPress | 5.8+ |
| PHP | 7.4+ |
Step 1: Configure a Feed
Section titled “Step 1: Configure a Feed”- Go to WPsigner → Integrations → Contact Form 7
- Click Add Feed
- Configure:
- Feed Name: Descriptive name (e.g., “Service Contract - Contact”)
- CF7 Form: Select the form from the dropdown
- Template: Select a WPsigner template
- Document Title: Use dynamic variables like
Contract - {{signer_name}} - {{date}} - Signer Name Field: CF7 tag name (e.g.,
your-name) - Signer Email Field: CF7 tag name (e.g.,
your-email)
- Optionally add Variable Mappings to pass extra form data to the template
- Optionally enable Auto Send to email the signing link immediately
- Click Save Feed
Both the Name and Email fields are required. If either is missing when the form is submitted, the integration will skip the submission silently.
Step 2: Test
Section titled “Step 2: Test”- Open the page with your CF7 form on the frontend
- Fill in the form with test data (use your own email to receive the signing link)
- Submit the form
- Check WPsigner → Documents — a new document should appear
- If Auto-send is enabled, check your inbox for the signing email
How It Works
Section titled “How It Works”The integration hooks into CF7’s post-validation pipeline. Here is the full flow:
User submits CF7 form ↓CF7 runs all validation (required fields, format checks) ↓CF7 runs spam filters (Akismet, reCAPTCHA, honeypot) ↓CF7 sends its configured email(s) ↓`wpcf7_mail_sent` hook fires ↓WPsigner checks for matching feeds (by form ID) ↓For each matching feed: → Extracts signer name and email from mapped tag names → Resolves variable mappings from form data → Creates document from selected template → (Optional) Sends signing email to signer| Step | Details |
|---|---|
| 1. User submits CF7 form | CF7 validates all fields (spam, CAPTCHA, required fields) |
2. wpcf7_mail_sent fires | WPsigner receives validated, spam-free data |
| 3. Feed matches form ID | Checks for active feeds linked to this form |
| 4. Signer data extracted | Name and email pulled from configured CF7 tag names |
| 5. Variables resolved | Custom variable mappings populate template placeholders |
| 6. Document created | PDF generated from template with all mapped data |
| 7. Auto-send (optional) | Signing request emailed immediately to the signer |
CF7 Tag Names
Section titled “CF7 Tag Names”CF7 uses “tag names” to identify form fields. You can find them in your CF7 form editor — each tag has a unique name that you reference in WPsigner:
[text* your-name] → Tag name: your-name[email* your-email] → Tag name: your-email[tel your-phone] → Tag name: your-phone[textarea your-message] → Tag name: your-message[text your-company] → Tag name: your-company[text your-address] → Tag name: your-addressMap these tag names in your WPsigner feed configuration. The tag name is the second value inside the brackets (after the field type).
Variable Mapping
Section titled “Variable Mapping”Beyond the required signer name and email, you can pass additional form data into your document templates using variable mapping. This allows dynamic content like company names, phone numbers, or addresses to appear in the generated document.
Setting Up Variable Mappings
Section titled “Setting Up Variable Mappings”- In the feed editor, scroll to the Variable Mapping section
- Click Add to create a new mapping row
- Enter the variable name (left input) using the
custom.*prefix - Enter the CF7 tag name (right input) that contains the data
Example Mappings
Section titled “Example Mappings”| Variable | CF7 Tag Name | Use in Template |
|---|---|---|
custom.company | your-company | {{custom.company}} |
custom.phone | your-phone | {{custom.phone}} |
custom.address | your-address | {{custom.address}} |
custom.position | job-title | {{custom.position}} |
custom.amount | contract-amount | {{custom.amount}} |
Document Title Variables
Section titled “Document Title Variables”You can also use dynamic placeholders in the document title:
| Variable | Replaced With | Example |
|---|---|---|
{{signer_name}} | Signer’s full name | John Smith |
{{signer_email}} | Signer’s email | john@example.com |
{{date}} | Current date | 2026-03-06 |
{{company_name}} | Company name (if mapped) | Acme Corp |
Example title: NDA - {{signer_name}} - {{date}}
Use Cases
Section titled “Use Cases”| Scenario | Setup |
|---|---|
| Client onboarding | Contact form → NDA template → Auto-send |
| Quote requests | Quote form → Service agreement template |
| Job applications | Application form → Offer letter template |
| Event registration | Registration form → Waiver template → Auto-send |
| Consent collection | Consent form → Consent document template → Auto-send |
| Rental agreements | Booking form → Rental agreement template → Auto-send |
| Freelancer contracts | Project inquiry form → Freelance contract template |
| Vendor agreements | Vendor intake form → Vendor contract template → Auto-send |
Multiple Feeds
Section titled “Multiple Feeds”You can create multiple feeds for the same form or template:
- One form, multiple templates: A single form submission can generate different documents (e.g., both an NDA and a service agreement)
- Multiple forms, one template: Different CF7 forms can all use the same document template
- One-to-one: Each form has its own dedicated template
Each feed operates independently. When a form is submitted, all active feeds linked to that form will trigger.
Security
Section titled “Security”| Feature | Details |
|---|---|
| Post-validation hook | Only fires after CF7 completes all checks (Akismet, reCAPTCHA, honeypot) |
| Rate Limiting | 10 documents/min per form via WordPress transients |
| Feed Sanitization | All fields sanitized on save with appropriate WordPress functions |
| Variable Restriction | Only [a-zA-Z0-9_.] allowed in variable names |
| No PII in Logs | Error logs never contain names or email addresses |
| Nonce + Capability | All admin AJAX verified with nonce and manage_options check |
Troubleshooting
Section titled “Troubleshooting”Common Issues
Section titled “Common Issues”| Issue | Cause | Solution |
|---|---|---|
| No document created after submission | Feed not active | Check feed is enabled in WPsigner → Integrations |
| No document created | Form or template not selected | Verify the feed configuration has both a form and template |
| Signer not receiving email | Auto-send not enabled | Enable “Auto-send document” in the feed settings |
| Signer not receiving email | SMTP issue | Check your WordPress email configuration (use an SMTP plugin) |
| Wrong signer name/email | Tag name mismatch | Verify the CF7 tag names match exactly (case-sensitive) |
| Variables not appearing in document | Incorrect variable name | Ensure variable names use the custom.* prefix and match template placeholders |
| ”Contact Form 7 is not installed” | Plugin not active | Install and activate CF7 from the WordPress plugin directory |
| Rate limit exceeded | Too many rapid submissions | Wait 60 seconds — limit is 10 documents/min per form |
| Fields not appearing on signed PDF | Template has no fields | Re-create the template with fields positioned correctly |
Checking Error Logs
Section titled “Checking Error Logs”If documents are not being created, check the WordPress debug log:
- Enable debug logging in
wp-config.php:
define('WP_DEBUG', true);define('WP_DEBUG_LOG', true);- Check the log file at
wp-content/debug.log - Look for entries starting with
[WPsigner CF7]
Rate Limiting
Section titled “Rate Limiting”The integration has a built-in rate limit of 10 documents per minute per form to prevent abuse. If you’re testing rapidly, wait a minute between submissions.
Compatibility
Section titled “Compatibility”| Component | Supported Versions |
|---|---|
| Contact Form 7 | 5.0+ |
| WPsigner | 2.1.0+ |
| WordPress | 5.8+ |
| PHP | 7.4+ |
Next Steps
Section titled “Next Steps”- Templates — Learn more about creating and managing templates
- Document Workflow — Understanding document statuses and actions
- REST API — For advanced programmatic integrations
- WhatsApp Integration — Send signing links via WhatsApp
- Gravity Forms — Gravity Forms integration
- Fluent Forms — Fluent Forms integration
- WPForms — WPForms integration
- Automation — Connect with workflow automation platforms