Live · Status OK
Dokumentation · OW Forms v1.1.0

OW Forms
Dokumentation

Der WordPress Formular-Builder, neu gedacht für 2026.

v1.1.0GPL-2.0-or-laterDokumentation

OW Forms — Dokumentation

Ein moderner, DSGVO-nativer Formular-Builder für WordPress. Autor: OptionWeb — Julien Daniel Plugin-Startseite: https://optionweb.dev/de/addons/ow-forms/ Lizenz: GPL-2.0-or-later Dieses Dokument deckt Version 1.0.2 ab.


Inhaltsverzeichnis

  1. Überblick
  2. Installation
  3. Schnellstart — Ihr erstes Formular
  4. Feldtypen
  5. Anti-Spam-Stack
  6. DSGVO-Funktionen
  7. E-Mail-Benachrichtigungen
  8. Webhooks
  9. Datei-Uploads
  10. Rendering: Shortcode, Gutenberg, REST
  11. Contact Form 7-Importer
  12. Einstellungsreferenz
  13. REST API
  14. Entwickler-Hooks (filters & actions)
  15. Integration mit OW Consent / OW Shield
  16. Internationalisierung
  17. Fehlerbehebung
  18. FAQ

Überblick

OW Forms ist ein schema-gesteuerter Formular-Builder. Jedes Formular ist ein JSON-Dokument, das seine Felder, Validierung und sein Submit-Verhalten beschreibt. Das Plugin rendert dieses Schema als barrierefreies HTML, validiert Übermittlungen serverseitig, leitet sie durch einen vierlagigen Anti-Spam-Stack, persistiert, was Sie persistieren lassen, und löst E-Mail- und Webhook-Benachrichtigungen aus.

Was mitgeliefert wird (alles kostenlos, GPL-2):

  • JSON-Schema-Engine mit 17 Feldtypen
  • 4-lagiger Anti-Spam: Honeypot, Time-Trap, Multi-Provider-CAPTCHA, IP-Reputation
  • Native DSGVO-Einwilligung + Aufbewahrung + DSAR
  • REST API (Namespace owf/v1) — öffentliches Submit + Admin-CRUD
  • Gutenberg-Block + Shortcode + PHP-Render-API
  • HMAC-signierte ausgehende Webhooks
  • Ein-Klick-Importer für Contact Form 7
  • Erkennt automatisch OW Canvas-Theme-Tokens für visuelle Konsistenz

Was es bewusst NICHT tut:

  • Zahlungsabwicklung (verwenden Sie WooCommerce + ein dediziertes Checkout)
  • Multi-Page-Wizards über einfache Vor/Zurück hinaus (nutzen Sie ein dediziertes Wizard-Plugin)
  • Drag-and-Drop-Visual-Builder in v1 (nur JSON-Editor; Visual Builder auf der Roadmap)

Installation

Aus WordPress.org (empfohlen)

  1. WordPress-Admin → Plugins → Installieren
  2. Suchen Sie nach OW Forms
  3. Klicken Sie Jetzt installieren, dann Aktivieren

Aus .zip-Upload

  1. Laden Sie ow-forms-1.0.2.zip herunter von https://optionweb.dev/de/addons/ow-forms/
  2. Plugins → Installieren → Plugin hochladen
  3. Wählen Sie die Datei, klicken Sie Jetzt installieren, dann Aktivieren

Anforderungen

  • WordPress 6.0 oder neuer
  • PHP 7.4 oder neuer (8.1+ empfohlen)
  • MySQL/MariaDB mit JSON-Spalten-Unterstützung (5.7+ / 10.2+)

Was installiert wird

Bei der Aktivierung erstellt OW Forms drei eigene Tabellen:

  • {prefix}_owf_submissions — Submission-Payloads + Spam-Metadaten
  • {prefix}_owf_files — Register hochgeladener Dateien
  • {prefix}_owf_log — Submission-Audit-Trail

Plus einen Custom Post Type owf_form (nicht öffentlich abfragbar), der zum Speichern der Formularschemata verwendet wird.


Schnellstart

Nach der Aktivierung wird automatisch ein Standard-"Kontakt"-Formular erstellt.

  1. Gehen Sie zu OW Forms → Formulare im Admin
  2. Notieren Sie sich die ID des Standardformulars (z. B. 1)
  3. Fügen Sie auf einer beliebigen Seite oder Beitrag den Shortcode ein:
[owf_form id="1"]

…oder fügen Sie den OW Forms-Gutenberg-Block ein und wählen Sie das Formular aus dem Dropdown.

Das war's. Das Formular wird gerendert, akzeptiert Übermittlungen, sendet eine Admin-E-Mail an admin_email und speichert die Übermittlung in der Datenbank.

Um es anzupassen, öffnen Sie das Formular unter OW Forms → Formulare → [Bearbeiten] und passen Sie das JSON-Schema direkt an. Ein Visual Builder steht auf der v1.1-Roadmap.


Feldtypen

OW Forms unterstützt 17 Feldtypen. Jedes Feld im Schema ist ein Objekt mit mindestens type und name; die meisten akzeptieren zusätzlich label, help, required, placeholder und typspezifische Optionen.

typeZweckWichtige Optionen
textEinzeiliger Textplaceholder, pattern, maxlength
emailE-Mail-AdresseAuto-Validierung RFC 5322
telTelefonnummerLockere Validierung (E.164-freundlich)
urlURLAuto-Validierung http(s)://
numberNumerischmin, max, step
textareaMehrzeiliger Textrows, maxlength
selectEinzelnes Dropdownoptions: [{value, label}]
radioEinzelauswahloptions: [{value, label}]
checkboxEinzel-Booleandefault: bool
checkbox-groupMehrfachauswahloptions: [{value, label}]
dateDatumsauswahlmin, max (YYYY-MM-DD)
timeZeitauswahlmin, max (HH:MM)
datetimeDatum + Zeitmin, max (YYYY-MM-DDTHH:MM)
fileDatei-Uploadmultiple: bool, accept
hiddenVersteckter WertNützlich für Tracking
rating1–5 Sterne-Bewertung
consentDSGVO-Einwilligungs-CheckboxAuto-injiziert, wenn DSGVO aktiv

Schema-Beispiel

{
  "title": "Contact us",
  "fields": [
    {
      "type": "text",
      "name": "name",
      "label": "Your name",
      "required": true,
      "placeholder": "Jane Doe"
    },
    {
      "type": "email",
      "name": "email",
      "label": "Email",
      "required": true
    },
    {
      "type": "select",
      "name": "subject",
      "label": "How can we help?",
      "required": true,
      "options": [
        {"value": "quote",   "label": "Request a quote"},
        {"value": "support", "label": "Technical support"},
        {"value": "other",   "label": "Other"}
      ]
    },
    {
      "type": "textarea",
      "name": "message",
      "label": "Message",
      "required": true,
      "rows": 6
    }
  ],
  "submit": {
    "label": "Send",
    "success_message": "Thanks — we will reply within 24 hours.",
    "redirect_url": ""
  }
}

Die name-Werte der Felder werden zu Schlüsseln im gespeicherten Payload und zu Tokens, die Sie in E-Mail-Templates verwenden können ({{name}}, {{email}} usw.).


Anti-Spam-Stack

OW Forms führt vier unabhängige Schichten parallel aus. Jede Schicht steuert einen Score-Beitrag bei; eine Übermittlung mit einem Score ≥ 80 wird stillschweigend verworfen — es wird keine Fehlermeldung zurückgegeben, sodass Bots nicht gegen den Schutz iterieren können.

1. Honeypot

Ein visuell verstecktes Textfeld, das Bots ausfüllen und Menschen nicht. Einstellung:

  • spam_honeypot_enabled (Standard: true)

2. Time-Trap

Lehnt Übermittlungen ab, die schneller als ein konfigurierbarer Schwellenwert abgeschlossen werden (typische Bots posten sofort).

  • spam_timetrap_enabled (Standard: true)
  • spam_timetrap_min_seconds (Standard: 2)

3. CAPTCHA (Multi-Provider)

Server-zu-Server-Token-Validierung gegen die API des Anbieters. Wählen Sie einen aus:

  • turnstile — Cloudflare Turnstile (empfohlen, datenschutzfreundlich, keine Challenge-UX)
  • recaptcha_v3 — Google reCAPTCHA v3 (unsichtbar)
  • hcaptcha — hCaptcha (sichtbares Widget)
  • friendly_captcha — Friendly Captcha (self-hosted Widget, MIT-lizenziert, EU-freundlich)

Setzen Sie spam_captcha_provider, spam_captcha_site_key und spam_captcha_secret_key im Anti-Spam-Einstellungs-Tab. Standard ist none.

Hinweis: Widget-JS von Turnstile / reCAPTCHA / hCaptcha wird vom Ursprung des Anbieters selbst geladen (deren JS führt eine Origin-Signaturprüfung serverseitig durch). Friendly Captcha ist self-hosted unter assets/js/vendor/.

4. IP-Reputation (optional)

Wenn OW Shield installiert und aktiv ist, nutzt OW Forms dessen IP-Reputations-Feed, um Übermittlungen zu bewerten:

  • spam_owshield_iprep (Standard: true)
  • spam_block_disposable_emails (Standard: true) — lehnt @mailinator, @tempmail und ca. 120 andere Wegwerf-Domains ab

Zusätzliche Heuristiken

  • spam_min_words_per_text_area — verlangt mindestens N Wörter in Textareas
  • spam_max_links_per_submission — lehnt ab, wenn mehr als N URLs im Payload
  • spam_blocklist_emails, spam_blocklist_words, spam_blocklist_ips — Ihre eigenen Listen

Protokollierung

Jede Spam-Entscheidung wird mit Begründung protokolliert. Prüfen Sie OW Forms → Übermittlungen → Filter "spam", um Schwellenwerte feinzujustieren, ohne im Blindflug zu sein.


DSGVO-Funktionen

DSGVO-Konformität ist nativ. Die Standardwerte sind konservativ; lockern Sie sie nur, wenn Sie dafür juristischen Rat haben.

Einwilligungs-Checkbox

Eine Einwilligungs-Checkbox wird automatisch am Ende jedes Formulars injiziert, wenn gdpr_consent_required true ist (Standard). Der Text ist konfigurierbar:

'gdpr_consent_text' => __(
    'I agree that my data will be processed to respond to my inquiry, in accordance with the privacy policy.',
    'ow-forms'
)

Wenn gdpr_auto_link_privacy aktiv ist (Standard), werden die Wörter "privacy policy" / "Datenschutzerklärung" automatisch mit der OW Consent-Datenschutz-URL verlinkt, wenn dieses Plugin aktiv ist, andernfalls mit Ihrer WP-konfigurierten Datenschutz-Seite.

IP-Speichermodi

store_ip-Einstellung:

WertWas gespeichert wird
noneNichts — keine IP gespeichert
pseudonymized (Standard)192.168.1.42192.168.1.0 (IPv4) / erste 4 Gruppen (IPv6)
fullVollständige IP — nur verwenden, wenn Ihre Rechtsgrundlage es zulässt

User-Agent-Speicherung

store_user_agent-Einstellung:

WertWas gespeichert wird
noneNichts
hashed (Standard)SHA-256 von UA + wp_salt()
fullGekürzter UA-String (max 64 chars)

Aufbewahrung & Bereinigung

Ein täglicher Cron bereinigt Übermittlungen, die älter als gdpr_retention_days sind (Standard: 1095 Tage — der CNIL-Standard für Interessentendaten). Auf 0 setzen, um das automatische Bereinigen zu deaktivieren.

Wenn gdpr_auto_delete_after_response true ist, löscht das Markieren einer Übermittlung als "bearbeitet" diese sofort zusammen mit allen hochgeladenen Dateien.

DSAR — Auskunfts- / Löschungsrecht

Formular-E-Mails werden beim Speichern mit wp_salt() gehasht. Wenn OW Consent aktiv ist und eine DSAR-Löschung für eine E-Mail-Adresse verarbeitet wird, löscht OW Forms automatisch passende Übermittlungen über email_hash und feuert:

do_action( 'owf_gdpr_erased_for_email', $hash, $count );

Ohne OW Consent können Sie die Löschung manuell aufrufen:

OWF_GDPR::erase_by_email( 'user@example.com' );  // returns int count

E-Mail-Benachrichtigungen

Templates

Sowohl Admin-Benachrichtigung als auch Nutzer-Auto-Antwort unterstützen {{token}}-Ersetzung:

TokenWird ersetzt durch
{{site_name}}get_bloginfo('name')
{{form_title}}Der Titel des Formulars
{{form_id}}Numerische Formular-ID
{{submission_id}}Numerische Submission-ID (0 wenn nicht gespeichert)
{{date}}Submission-Zeitstempel
{{ip}}IP gemäß store_ip-Modus
{{page_url}}URL, von der das Formular gesendet wurde
{{all_fields}}Alle Feld-Key/Value-Paare
{{<field_name>}}Beliebiges Feld über seinen name (z. B. {{email}}, {{message}})

Einstellungen

EinstellungStandardAnmerkungen
default_recipient_emailleer → admin_emailPro Formular überschreibbar via schema.mail.recipient
from_nameleerAnzeigename des Absenders
from_emailleer → WP-StandardAbsenderadresse
mail_htmltruefalse schaltet auf Plain-Text um
mail_admin_subject[{{site_name}}] New message via {{form_title}}
mail_admin_bodyleer → automatisch aus Feldern aufgebaut
mail_user_autoreply_enabledtrue
mail_user_subjectWe have received your message
mail_user_bodyleer → generische Bestätigung
mail_failed_alert_emailleerBenachrichtigt, wenn Mail-Versand fehlschlägt

Pro-Formular-Override

Das Formularschema kann globale Werte überschreiben:

{
  "mail": {
    "recipient": "sales@example.com",
    "subject": "New lead — {{name}}",
    "body": "Lead: {{name}}\\nEmail: {{email}}\\nMessage: {{message}}",
    "autoreply": true,
    "autoreply_subject": "Thanks, {{name}}!",
    "autoreply_body": "Hi {{name}},\\n\\nWe got your message."
  }
}

Webhooks

Wenn webhook_url gesetzt ist, löst jede erfolgreiche Übermittlung einen HTTP-POST aus.

Payload (JSON)

{
  "form_id": 1,
  "form_title": "Contact",
  "submission_id": 42,
  "received_at": "2026-05-13T14:32:18+00:00",
  "fields": { "name": "Jane", "email": "jane@example.com", "message": "Hi" },
  "site": "https://example.com"
}

HMAC-Signatur

Wenn webhook_secret gesetzt ist, enthält der Request:

X-OWF-Signature: sha256=<hex digest of HMAC-SHA256(body, secret)>

Empfängerseitige Verifizierung (Node-Beispiel):

const expected = crypto
  .createHmac('sha256', SECRET)
  .update(rawBody)
  .digest('hex');
const provided = req.headers['x-owf-signature'].replace(/^sha256=/, '');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(provided))) {
  return res.status(401).end('bad sig');
}

Retries

Wenn der Empfänger 5xx zurückgibt oder Zeitüberschreitung hat, versucht OW Forms es erneut mit exponentiellem Backoff (60 s → 5 min → 30 min). Nach 3 Fehlschlägen wird der Webhook als dauerhaft fehlgeschlagen protokolliert, blockiert aber die Übermittlung nicht.


Datei-Uploads

Wenn allow_file_uploads aktiv ist (Standard true), wird jedes Feld vom Typ file akzeptiert. Die Pipeline:

  1. Serverseitige Validierung — Dateigröße (max_file_size_mb, Standard 8 MB), Erweiterungs-Allowlist (allowed_file_types) und eine finfo-MIME-Prüfung abgeglichen mit wp_get_mime_types().
  2. Speicherungwp-content/uploads/owf-uploads/YYYY/MM/<sha256>.<ext> mit einer Deny-all-.htaccess (Apache) und leerer index.php (Nginx/IIS).
  3. Datenbankregister — Dateimetadaten + SHA-256-Hash in {prefix}_owf_files, verknüpft mit der Eltern-Submission-ID.
  4. Bereinigung — wenn eine Übermittlung gelöscht wird (manuell, durch Aufbewahrung oder DSAR), werden alle verknüpften Dateien entfernt.

Wichtig: OW Forms verwendet einen benutzerdefinierten, isolierten Upload-Pfad, nicht die WordPress-Mediathek, daher sind hochgeladene Dateien nicht über den Standard-Endpunkt /wp-json/wp/v2/media auffindbar und es werden keine Thumbnails generiert. Das ist absichtlich — Formularanhänge sind privat für den Formular-Eigentümer.

Erlaubte Dateitypen (Standard)

pdf, jpg, jpeg, png, webp, doc, docx, xls, xlsx, csv, txt

Zum Erweitern:

add_filter( 'owf_settings', function( $s ) {
    $s['allowed_file_types'] = array_merge(
        (array) $s['allowed_file_types'],
        array( 'odt', 'ods', 'zip' )
    );
    return $s;
} );

Rendering

Shortcode

[owf_form id="42"]
[owf_form slug="contact"]

id (numerische Post-ID) oder slug (Post-Slug) — eines ist erforderlich.

Gutenberg-Block

Suchen Sie im Block-Editor nach "OW Forms" im Block-Einfüger und wählen Sie Ihr Formular aus dem Dropdown.

PHP

echo OWF_Form::render( 42 );
// or
echo do_shortcode( '[owf_form id="42"]' );

REST

Das Formular kann auch programmatisch übermittelt werden — siehe REST API.


CF7-Importer

Wenn Contact Form 7 installiert ist oder war, liefert OW Forms einen Ein-Klick-Importer mit.

OW Forms → Tools → Aus Contact Form 7 importieren

Der Importer:

  1. Scannt jeden wpcf7_contact_form-Beitrag in Ihrer Datenbank
  2. Parst jedes shortcode-basierte CF7-Formular und baut das entsprechende OW Forms-Schema
  3. Behält Empfänger, Betreff, Erfolgs-/Fehlermeldungen und Feldtypen bei
  4. Schreibt jeden [contact-form-7 id="..."]-Shortcode in all Ihrem post_content (Seiten, Beiträge, Custom Post Types) um zu [owf_form id="..."]
  5. Protokolliert Ergebnisse: gefundene, importierte, übersprungene (bereits importiert)

Das CF7-Plugin kann anschließend deaktiviert und entfernt werden.

Der Importer ist idempotent: Zweimal ausführen erzeugt keine Duplikate. Bereits importierte CF7-Formulare werden über einen _owf_imported_from_cf7-Meta-Key markiert und bei nachfolgenden Läufen übersprungen.


Einstellungsreferenz

Alle Einstellungen werden in einem einzigen Option-Key owf_settings gespeichert. Sie können sie programmatisch lesen oder überschreiben:

$value = OWF_Core::setting( 'spam_timetrap_min_seconds' );
OWF_Core::update_settings( array( 'spam_timetrap_min_seconds' => 3 ) );

Vollständige Standardwerte

array(
    // General
    'default_recipient_email'        => '',     // empty = admin_email
    'from_name'                      => '',
    'from_email'                     => '',
    'sender_uses_dpo'                => true,

    // Anti-spam
    'spam_honeypot_enabled'          => true,
    'spam_timetrap_enabled'          => true,
    'spam_timetrap_min_seconds'      => 2,
    'spam_captcha_provider'          => 'none',
    'spam_captcha_site_key'          => '',
    'spam_captcha_secret_key'        => '',
    'spam_owshield_iprep'            => true,
    'spam_block_disposable_emails'   => true,
    'spam_min_words_per_text_area'   => 0,
    'spam_max_links_per_submission'  => 3,
    'spam_blocklist_emails'          => array(),
    'spam_blocklist_words'           => array(),
    'spam_blocklist_ips'             => array(),

    // GDPR
    'gdpr_consent_required'          => true,
    'gdpr_consent_text'              => '...',
    'gdpr_auto_link_privacy'         => true,
    'gdpr_retention_days'            => 1095,
    'gdpr_auto_delete_after_response' => false,

    // Storage
    'store_submissions'              => true,
    'store_ip'                       => 'pseudonymized',
    'store_user_agent'               => 'hashed',
    'allow_file_uploads'             => true,
    'max_file_size_mb'               => 8,
    'allowed_file_types'             => array( 'pdf', 'jpg', 'jpeg', 'png',
                                                'webp', 'doc', 'docx', 'xls',
                                                'xlsx', 'csv', 'txt' ),

    // Notifications
    'mail_html'                      => true,
    'mail_admin_subject'             => '[{{site_name}}] New message via {{form_title}}',
    'mail_admin_body'                => '',
    'mail_user_autoreply_enabled'    => true,
    'mail_user_subject'              => 'We have received your message',
    'mail_user_body'                 => '',
    'mail_failed_alert_email'        => '',
    'webhook_url'                    => '',
    'webhook_secret'                 => '',

    // Rendering
    'style_preset'                   => 'auto',
    'button_label_default'           => 'Send',
    'success_message_default'        => 'Your message has been sent. We will reply within 24 hours.',
    'error_message_default'          => 'An error occurred. Please try again or contact us directly.',
    'inherit_theme_tokens'           => true,

    // Analytics (opt-in)
    'track_conversions'              => false,
    'conversion_event_name'          => 'generate_lead',
    'conversion_value'               => 0,
    'conversion_currency'            => 'EUR',
);

REST API

Alle Endpunkte leben unter dem Namespace owf/v1.

Öffentlicher Endpunkt

MethodePfadBerechtigung
POST/owf/v1/submitNonce-geschützt (wp_rest)

Body:

{
  "form_id": 1,
  "fields": { "name": "Jane", "email": "jane@example.com", "message": "Hi" },
  "_owf_nonce": "<from wp_create_nonce('owf_submit_form')>",
  "_owf_time": 1736780000,
  "_owf_hp": ""
}

Antwort (200):

{ "ok": true, "id": 42, "message": "Your message has been sent." }

Antwort (422) bei Validierungsfehler:

{
  "ok": false,
  "errors": { "email": "Please enter a valid email" },
  "message": "Please review the fields in error."
}

Admin-Endpunkte (erfordern manage_options)

MethodePfadBeschreibung
GET/owf/v1/formsListe aller Formulare
GET/owf/v1/forms/{id}Ein Formular abrufen
PUT/owf/v1/forms/{id}Formular aktualisieren
POST/owf/v1/forms/createEin Formular erstellen
GET/owf/v1/submissionsÜbermittlungen auflisten (Filter: form_id, status)
GET/owf/v1/submissions/{id}Eine Übermittlung abrufen
POST/owf/v1/submissions/{id}/handleAls bearbeitet markieren (kann löschen)
POST/owf/v1/importer/cf7CF7-Importer ausführen
GET/POST/owf/v1/settingsPlugin-Einstellungen lesen oder schreiben

Alle Admin-Endpunkte erfordern sowohl die Capability manage_options als auch einen gültigen WP-REST-Nonce.


Hooks (filters & actions)

Actions

/**
 * Fires after a submission has been processed and stored.
 *
 * @param int   $submission_id  Database ID (0 if not stored)
 * @param int   $form_id        Form ID
 * @param array $cleaned        Sanitized field payload
 * @param array $schema         Full form schema
 */
do_action( 'owf_submission_received', $submission_id, $form_id, $cleaned, $schema );
/**
 * Fires after a DSAR erasure has deleted matching submissions by email hash.
 *
 * @param string $email_hash   SHA-256(email + wp_salt())
 * @param int    $deleted_count
 */
do_action( 'owf_gdpr_erased_for_email', $email_hash, $deleted_count );

Filters

/**
 * Filter the resolved settings array (merged defaults + saved + per-request).
 */
apply_filters( 'owf_settings', array $settings );

/**
 * Whitelist of trusted reverse proxy IPs that may set X-Forwarded-For.
 * Without this OW Forms ignores proxy headers (to prevent IP spoofing).
 */
apply_filters( 'owf_trusted_proxies', array $proxies );

/**
 * List of disposable email domains rejected when `spam_block_disposable_emails`
 * is on.
 */
apply_filters( 'owf_disposable_domains', array $domains );

Empfohlenes Muster — Wegwerf-Domain-Liste erweitern

add_filter( 'owf_disposable_domains', function( $list ) {
    return array_merge( $list, array(
        'example-throwaway.com',
        'company-blocked-domain.net',
    ) );
} );

Empfohlenes Muster — Übermittlungen an ein CRM senden

add_action( 'owf_submission_received', function( $sid, $form_id, $cleaned ) {
    if ( $form_id !== 7 ) return;  // only the "Sales" form
    wp_remote_post( 'https://crm.example.com/leads', array(
        'headers' => array( 'Authorization' => 'Bearer ' . CRM_TOKEN ),
        'body'    => wp_json_encode( array(
            'email'   => $cleaned['email'],
            'name'    => $cleaned['name'],
            'message' => $cleaned['message'],
            'source'  => 'website-form',
        ) ),
        'headers' => array( 'Content-Type' => 'application/json' ),
    ) );
}, 10, 3 );

Integrationen

OW Canvas (Theme)

Wenn das OW Canvas-Theme aktiv ist, erbt OW Forms dessen CSS Custom Properties (--owc-ink, --owc-paper, --owc-accent usw.) für visuelle Konsistenz. Deaktivieren mit inherit_theme_tokens = false.

OW Consent

Wenn OW Consent aktiv ist:

  • Der Link in der DSGVO-Einwilligungs-Checkbox zeigt automatisch auf Ihre OW Consent- Datenschutz-URL
  • Übermittlungen werden mit OW Consent-Datensätzen verknüpft (wenn der Besucher ein Consent-ID-Cookie hat)
  • DSAR-Löschflüsse aus OW Consent bereinigen automatisch OW Forms-Übermittlungen für denselben E-Mail-Hash

OW Shield

Wenn OW Shield aktiv ist und spam_owshield_iprep an ist, wird die IP jeder Übermittlung vor der Annahme gegen den Reputations-Feed von OW Shield bewertet.


Internationalisierung

Die Quellsprache ist Englisch. Eine französische Übersetzung wird unter languages/ow-forms-fr_FR.po mitgeliefert.

Für Übersetzer

Das .pot-Template befindet sich in languages/ow-forms.pot. Übersetzungen einreichen über translate.wordpress.org/projects/wp-plugins/ow-forms, sobald das Plugin auf WP.org genehmigt ist. Für lokale Verteilung legen Sie ow-forms-<locale>.mo in den Ordner languages/.

.mo lokal kompilieren

msgfmt languages/ow-forms-fr_FR.po -o languages/ow-forms-fr_FR.mo

Fehlerbehebung

Formular wird übermittelt, aber keine E-Mail kommt an

  1. Prüfen Sie, ob Ihre Seite überhaupt Mails senden kann — testen Sie über das Kontaktformular eines anderen Plugins oder mit Mail Tester
  2. Prüfen Sie OW Forms → Übermittlungen, um zu bestätigen, dass die Übermittlung eingegangen ist (wenn ja, liegt das Problem an der Zustellung, nicht an OW Forms)
  3. Setzen Sie mail_failed_alert_email auf Ihre eigene Adresse — OW Forms schickt Ihnen eine E-Mail, wenn wp_mail() false zurückgibt
  4. Installieren Sie ein SMTP-Plugin (Fluent SMTP, WP Mail SMTP usw.) — das Standard- PHP-mail() wird von 95 % der empfangenden Server abgelehnt

CAPTCHA wird nicht angezeigt

  • Prüfen Sie, ob spam_captcha_site_key und spam_captcha_secret_key beide gesetzt sind
  • Öffnen Sie die Seite in den DevTools — die Vendor-Skript-URL sollte mit 200 laden
  • Bei reCAPTCHA muss Ihre Site-Domain im Google-Admin registriert sein
  • Bei Turnstile muss der Widget-Modus im Cloudflare-Admin "Managed" oder "Non-interactive" sein

Dateien werden hochgeladen, aber der Admin kann sie nicht herunterladen

Das ist beabsichtigt — hochgeladene Dateien werden von einem authentifizierten PHP-Handler ausgeliefert, nicht direkt. Prüfen Sie, ob Sie als Nutzer mit manage_options eingeloggt sind.

CF7-Importer sagt "0 Formulare gefunden"

Der Importer scannt den Post-Typ wpcf7_contact_form. Wenn CF7 bereits deaktiviert ist und die Beiträge gelöscht wurden, gibt es nichts mehr zu importieren. Reaktivieren Sie CF7 nur für den Import und deaktivieren Sie es danach wieder.

Submissions-Tabelle ist riesig

  • Senken Sie gdpr_retention_days (Standard 1095 / 3 Jahre)
  • Deaktivieren Sie store_submissions, wenn Sie nur E-Mail-Zustellung benötigen, keinen Datenbank-Audit-Trail
  • Setzen Sie gdpr_auto_delete_after_response = true, um bei "bearbeitet" zu löschen

FAQ

Ist OW Forms kostenlos? Ja. GPL-2.0-or-later. Es gibt keine Pro-Version, keinen Lizenzschlüssel, kein hinter einer Zahlung gesperrtes Feature.

Funktioniert es auf WordPress Multisite? Ja — jede Site hat eigene Tabellen und eigene Formular-Bibliothek, wie erwartet isoliert.

Werden Multi-Step-Formulare unterstützt? Grundlegende Vor/Zurück-Navigation funktioniert über Feldgruppierung im Schema. Eine erstklassige Wizard-UX steht auf der v1.1-Roadmap.

Wie exportiere ich Übermittlungen? OW Forms → Übermittlungen → CSV exportieren. Der Export respektiert die aktuellen Filter (Formular, Datumsbereich, Status).

Kann ich meine Formulare hinter einer Paywall oder einem Login hosten? Ja — wickeln Sie den Shortcode in die Gating-Logik eines Membership-Plugins ein oder rendern Sie via PHP innerhalb einer is_user_logged_in()-Prüfung.

Integriert es sich mit E-Mail-Marketing- / CRM-Tools? Out of the box: Webhooks (HMAC-signierter POST an beliebigen Endpunkt) und E-Mail-Empfänger pro Formular. Für Brevo / Mailchimp / HubSpot / Pipedrive hängen Sie sich an owf_submission_received und rufen Sie die REST-API des Anbieters auf — siehe den Hooks-Abschnitt.

Ist das Plugin DSGVO-zertifiziert? Die Standardwerte des Plugins sind an CNIL- / DSGVO-Best-Practices ausgerichtet, aber eine Zertifizierung ist ein juristischer Prozess, spezifisch für Ihre Verantwortlichen- Konfiguration. Wir liefern das technische Werkzeug; Ihr DSB bestätigt die Policy.

Wo ist der Support?


Entwickelt von OptionWeb — Julien Daniel, Châtelet, Belgien.