Was wir am Ende haben
- Ein Elementor-Pro-Formular mit den Feldern E-Mail, Vorname, Nachname und Mitgliedsnummer
- Eine serverseitige Prüfung, ob die eingegebene Mitgliedsnummer überhaupt existiert (Abgleich gegen eine CSV-Liste)
- Eine automatische Übertragung der Registrierungsdaten an Digimember per Webhook
Voraussetzungen
- WordPress mit Elementor Pro (der kostenlose Elementor-Editor reicht nicht, da wir Pro-spezifische Hooks nutzen)
- Zugriff auf die functions.php deines Child-Themes oder die Möglichkeit, ein kleines Custom-Plugin zu installieren
- Das Plugin Digimember mit einer aktiven Webhook-URL für dein Produkt Grundkenntnisse im Umgang mit PHP-Code (du musst nichts programmieren, nur kopieren und anpassen)
Links:
Elementor: https://be.elementor.com/
Digimember: https://digimember.de/
Schritt 1: Formular in Elementor anlegen
| Feld | ID |
|---|---|
email |
|
| Vorname | firstname |
| Nachname | lastname |
| Mitgliedsnummer | mitgliedsnummer |
Wichtig: Diese IDs sind der Dreh- und Angelpunkt des gesamten Setups. Der PHP-Code, den wir gleich einbauen, greift darauf zurück – ein Tippfehler hier führt dazu, dass nichts funktioniert.
Vergib außerdem im Feld „Formularname“ (oben im Content-Tab des Formular-Widgets) einen sprechenden Namen, z. B. Registrierung. Auch dieser Name muss später exakt im Code hinterlegt werden.
Schritt 2: Mitgliedsnummer gegen eine Liste prüfen
M-10001
M-10002
M-10003
Lade diese Datei nach wp-content/uploads/mitgliedsnummern.csv hoch.
Der Validierungs-Code
Füge diesen Code in deine functions.php oder dein Custom-Plugin ein:
get( 'fields' );
if ( ! isset( $raw_fields[ $field_id ] ) ) {
return;
}
$submitted_value = trim( $raw_fields[ $field_id ]['value'] );
if ( empty( $submitted_value ) ) {
return;
}
$valid_numbers = mitgliedsnummer_liste_laden();
if ( ! in_array( $submitted_value, $valid_numbers, true ) ) {
$ajax_handler->add_error(
$field_id,
'Diese Mitgliedsnummer ist uns nicht bekannt. Bitte überprüfe deine Eingabe.'
);
}
}, 10, 2 );
function mitgliedsnummer_liste_laden() {
static $cached = null;
if ( $cached !== null ) {
return $cached;
}
$cached = get_transient( 'mitgliedsnummern_liste' );
if ( $cached !== false ) {
return $cached;
}
$csv_path = WP_CONTENT_DIR . '/uploads/mitgliedsnummern.csv';
$numbers = [];
if ( file_exists( $csv_path ) && ( $handle = fopen( $csv_path, 'r' ) ) !== false ) {
while ( ( $row = fgetcsv( $handle ) ) !== false ) {
if ( ! empty( $row[0] ) ) {
$numbers[] = trim( $row[0] );
}
}
fclose( $handle );
}
set_transient( 'mitgliedsnummern_liste', $numbers, HOUR_IN_SECONDS );
return $numbers;
}
Was macht dieser Code?
- Der Hook elementor_pro/forms/validation feuert, sobald das Formular abgeschickt wird – noch bevor die Daten gespeichert werden.
- Die CSV-Datei wird eingelesen und für eine Stunde zwischengespeichert (WordPress Transient), damit nicht bei jeder Anfrage neu von der Festplatte gelesen werden muss.
- Ist die eingegebene Nummer nicht in der Liste, wird ein Fehler direkt am Formularfeld angezeigt – der Nutzer kommt nicht weiter.
Schritt 3: Daten an Digimember übergeben
https://deine-domain.de?dm_webhook=DEIN_TOKEN&email=...&firstname=...&lastname=...&mitgliedsnummer=...
Wichtiger Hinweis zur eingebauten Elementor-Webhook-Funktion
Elementor Pro bietet unter „Actions After Submit“ zwar eine eigene Webhook-Option – die sendet die Formulardaten aber als POST-Body, nicht als GET-Query-Parameter in der URL. Da Digimember die Werte direkt in der URL erwartet, funktioniert die eingebaute Funktion hier nicht zuverlässig. Es gibt auch keine Möglichkeit, in der Webhook-URL selbst Platzhalter für einzelne Feldwerte einzusetzen.
Die zuverlässige Lösung ist daher ein eigener PHP-Hook, der die URL serverseitig korrekt zusammenbaut.
Der Webhook-Code
get_form_settings( 'form_name' ) !== $form_name ) {
return;
}
$raw_fields = $record->get( 'fields' );
$email = isset( $raw_fields['email']['value'] ) ? trim( $raw_fields['email']['value'] ) : '';
$firstname = isset( $raw_fields['firstname']['value'] ) ? trim( $raw_fields['firstname']['value'] ) : '';
$lastname = isset( $raw_fields['lastname']['value'] ) ? trim( $raw_fields['lastname']['value'] ) : '';
$mitgliedsnr = isset( $raw_fields['mitgliedsnummer']['value'] ) ? trim( $raw_fields['mitgliedsnummer']['value'] ) : '';
if ( empty( $email ) || empty( $mitgliedsnr ) ) {
return;
}
$webhook_url = add_query_arg(
[
'dm_webhook' => 'DEIN_DIGIMEMBER_TOKEN',
'email' => rawurlencode( $email ),
'firstname' => rawurlencode( $firstname ),
'lastname' => rawurlencode( $lastname ),
'mitgliedsnummer' => rawurlencode( $mitgliedsnr ),
],
'https://deine-domain.de'
);
$response = wp_remote_get( $webhook_url, [ 'timeout' => 15 ] );
if ( is_wp_error( $response ) ) {
error_log( 'Digimember Webhook Fehler: ' . $response->get_error_message() );
} else {
error_log( 'Digimember Statuscode: ' . wp_remote_retrieve_response_code( $response ) );
}
}, 10, 2 );
Ersetze:
- DEIN_DIGIMEMBER_TOKEN durch dein tatsächliches Webhook-Token aus Digimember
- https://deine-domain.de durch deine eigene Domain
- Registrierung durch den Formularnamen, den du in Schritt 1 vergeben hast
Warum serverseitig statt clientseitig? Weil das Webhook-Token in deiner URL ein Geheimnis ist – landet es im JavaScript des Frontends, kann es theoretisch von Besuchern ausgelesen werden. Der Aufruf über wp_remote_get() läuft komplett auf dem Server und bleibt unsichtbar.
Die 3 häufigsten Stolperfallen
Aus eigener Erfahrung beim Einrichten hier die Punkte, an denen es am ehesten hakt:
1. Formularname stimmt nicht überein
Der Wert bei $form_name im Code muss exakt (Groß-/Kleinschreibung, keine Leerzeichen) dem „Formularname“-Feld im Elementor-Editor entsprechen. Ein einziger abweichender Buchstabe reicht, damit der Hook den Aufruf stillschweigend abbricht.
2. Feld-IDs falsch gesetzt oder vergessen
Jedes Formularfeld braucht unter Erweitert → ID eine feste ID. Ohne gesetzte ID generiert Elementor automatisch eine zufällige, die sich ändern kann – dann greift der Code ins Leere.
3. Excel wandelt Mitgliedsnummern mit führenden Nullen um
Falls deine Mitgliedsnummern mit „0“ beginnen (z. B. 007), formatiere die entsprechende Spalte in Excel vor dem CSV-Export unbedingt als Text – sonst wird daraus automatisch 7 und die Prüfung schlägt fehl.
Fehlersuche: So findest du heraus, wo es hakt
Falls die Übertragung an Digimember nicht funktioniert, hilft dir dieses Vorgehen:
- Aktiviere in deiner wp-config.php das Debug-Logging:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
Löse eine Testregistrierung aus. Öffne wp-content/debug.log und prüfe die Log-Einträge – sie zeigen dir, ob der Hook überhaupt gefeuert hat, welchen Statuscode Digimember zurückgibt und ob ein Fehler aufgetreten ist.
Fazit
Mit diesen beiden Code-Blöcken hast du eine vollständige, sichere Registrierungsstrecke: Nutzer können sich nur mit einer gültigen Mitgliedsnummer anmelden, und ihre Daten landen automatisch im richtigen Digimember-Produkt – ganz ohne manuellen Abgleich. Der Code lässt sich problemlos für weitere Produkte wiederverwenden, indem du einfach Formularname und Feld-IDs anpasst.
Links:
Elementor: https://be.elementor.com/
Digimember: https://digimember.de/
Baust du gerade selbst an deiner WordPress-Website und brauchst Unterstützung bei individuellen Formularlösungen? Schau gerne bei hello-basti.de vorbei.


