Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/eversthomas/bs-kudo-karten/archive/refs/heads/master.zipDigitale Kudo-Karten für WordPress – entwickelt von bezugssysteme.de.
Version: 0.10.0
Was ist das?
Ein WordPress-Plugin, das es Besuchern ermöglicht, digitale Wertschätzungskarten zu versenden. Der Absender wählt eine Karte, schreibt direkt auf die Sprechblase, gibt Absender und Empfänger an – und schickt die Karte per E-Mail.
Features
- 3-Schritt-Wizard mit Scroll-Dramaturgie
- Direkt auf die Karte schreiben – Text-Overlay über dem Kartenbild (contenteditable)
- Live-Zeichenzähler – Standard max. 240 Zeichen (im Backend konfigurierbar)
- Textimpulse als klickbare Chips pro Karte konfigurierbar
- „An mich selbst senden“ – Selbstwertschätzung als explizites Feature
- Verzögerter Versand – Datum und Uhrzeit wählbar
- Token-basierte Webansicht für Empfänger (temporäre URL, Drucklayout)
- Honeypot, Formular-Zeitstempel und Rate Limiting (Stunde + Tag) gegen Missbrauch
- Optional Cloudflare Turnstile und Absender-Bestätigung per E-Mail-Link (Double-Opt-In, abschaltbar)
- Missbrauchsmeldung – optionale Kontakt-E-Mail in Benachrichtigung und Webansicht
- HTML-Mail als Teaser mit Link zur Webansicht (+ optional QR-Code zur Online-Karte, lokal generiert)
- QR-Ziel-Link pro Karte (Rückseite) – optional eigene URL nur für den QR auf der Online-Kartenrückseite (nicht für den Mail-QR)
- Konfigurierbares Rückseiten-Layout – Bausteine (QR, Text, Logo) pro Spalte, Reihenfolge und Sichtbarkeit in der Webansicht
- Branding-Tab im Backend – Logo, Farbe, Mail-Template konfigurierbar
- Shortcode
[kudo_karten]– auf jeder Seite einsetzbar, Divi-kompatibel - Anpassbare Produktbezeichnung – Singular/Plural (z. B. „Kudokarte“ / „Kudokarten“) für Wizard, E-Mail und Webansicht; technische Slugs unverändert
Shortcode
[kudo_karten]
[kudo_karten set="dankbarkeit"]
Voraussetzungen
- WordPress 6.3+
- PHP 8.0+ mit GD-Erweiterung (für QR-Codes)
- Empfohlen: WP Mail SMTP für zuverlässigen Mailversand
- Für geplanten Versand: System-Cron (WP-Cron alle 5–15 Minuten auslösen)
Installation
- Plugin-Verzeichnis
bs-kudo-kartenin/wp-content/plugins/kopieren (inkl.vendor/) - Falls
vendor/fehlt: im Plugin-Verzeichniscomposer install --no-devausführen - Plugin im WordPress-Backend aktivieren
- Unter Kudo Karten → Karten verwalten Kartenbilder hochladen und Karten anlegen
- Unter Kudo Karten → Einstellungen Absender-Mail, Branding und Datenschutzhinweis konfigurieren
- Shortcode
[kudo_karten]auf einer Seite einfügen - Permalinks einmal speichern (Einstellungen → Permalinks), damit
/kudo-karte/{token}/funktioniert
Produktbezeichnung (z. B. „Kudokarten“)
Unter Einstellungen → Allgemein → Bezeichnung kann Singular und Plural frei gesetzt werden (z. B. Kudokarte / Kudokarten). Damit ändern sich sichtbare Texte in Wizard, E-Mail, Webansicht und Backend-Menü. Shortcode, Post-Typ-Slugs und URLs bleiben unverändert.
- Update ohne Datenverlust: Gespeicherte Karten, Branding-Texte, Betreff-Vorlage und Datenschutzhinweis in der Datenbank werden beim Plugin-Update nicht überschrieben.
- Leere Felder = bisherige Standardbezeichnung „Kudo-Karte“ / „Kudo-Karten“.
- Optional im Betreff: Platzhalter
{product}und{product_plural}(bestehende Betreff-Zeile bleibt, bis du sie anpasst).
Kartenbilder
Kartenbilder werden als WebP oder JPG/PNG über den WordPress-Medienmanager hinterlegt. Export mit mind. 1400px Breite empfohlen.
Backend-Struktur
Kudo Karten
├── Karten verwalten – CPT kudo_card (Bild, Rückseiten-Branding, QR-Ziel, Layout, Farbe)
├── Textbausteine – CPT kudo_textbaustein (Karten/Sets zugeordnet)
└── Einstellungen
├── Allgemein – Bezeichnung (Singular/Plural), Absender, Betreff, Kopie, geplanter Versand, QR
├── Branding – Logo, Primärfarbe, Mail-Footer, Missbrauchskontakt
└── Sicherheit – Rate Limits, Absender-Bestätigung, Turnstile, Cloudflare-IP, Datenschutz- & Haftungshinweis, Mail-Debug-Log
Datenschutz (Kurzüberblick)
Es werden keine personenbezogenen Daten dauerhaft in der Datenbank gespeichert (keine eigenen Tabellen für Namen, E-Mails oder Nachrichten). Daten liegen höchstens temporär in TTL-begrenzten Transients (WordPress-Cache), bis die Karte versendet wurde, der geplante Termin erreicht ist oder das Bestätigungsfenster abläuft.
- Sofortversand: Verarbeitung nur für den Versand; keine dauerhafte Speicherung.
- Absender-Bestätigung (Standard an): Anfrage ca. 30 Min. als Transient; Bestätigungslink per E-Mail (Landing-Seite + Button).
- Geplanter Versand: Transient bis zum Versandzeitpunkt (WP-Cron).
- Webansicht: Eigener Token-Transient (TTL konfigurierbar).
- Rate Limit / optional Turnstile: In der Datenschutzerklärung erwähnen, wenn aktiv.
- Mail-Debug: Nur bei
BSKUDO_MAIL_DEBUGoder lokaler Entwicklungs-URL aktiv.
Datenschutz- und Haftungshinweis im Wizard bitte an die Website-DSE anpassen.
Sicherheit (0.10.0)
| Einstellung (Tab Sicherheit) | Zweck |
|---|---|
| Rate Limit Stunde / Tag | Missbrauch über eine IP eindämmen |
| Website hinter Cloudflare | Echte Client-IP für Rate Limits (CF-Connecting-IP) |
| Absender-Bestätigung | Double-Opt-In (Landing + POST, Default an) |
| Turnstile Site-/Secret-Key | Bot-Schutz (serverseitig nur bei beiden Keys) |
| Haftungsausschluss | Pflicht-Checkbox vor Versand (Text konfigurierbar) |
Branding → Kontakt für Meldungen: E-Mail für Empfänger:innen bei unangebrachten Karten.
Rollout: Absender-Bestätigung und Haftungs-Checkbox sind für neue Defaults aktiv – auf Staging testen.
⚠️ Rechtlicher Hinweis & Haftungsausschluss (Disclaimer für Dritte)
Wichtig: Dieses Plugin wurde für den individuellen, internen Einsatz auf spezifischen Websites entwickelt und ist nicht für eine schlüsselfertige, unreflektierte öffentliche Nutzung optimiert. Wer diesen Quellcode von GitHub bezieht und auf eigenen Websites einsetzt, tut dies vollumfänglich auf eigene Verantwortung.
- Keine Rechts- oder Datenschutzberatung: Die Bereitstellung und Nutzung dieses Plugins entbindet den Website-Betreiber nicht von seinen gesetzlichen Pflichten (u. a. DSGVO, TTDSG, UWG). Für die Einhaltung aller Vorgaben (z. B. Datenschutzerklärung, Betroffenenrechte, Dokumentationspflichten, eventuelle AV-Verträge) ist ausschließlich der jeweilige Website-Betreiber verantwortlich.
- E-Card-Versand & Wettbewerbsrecht (§ 7 Abs. 2 Nr. 3 UWG): Nach deutscher Rechtsprechung (BGH, Az. I ZR 208/12) können Empfehlungs-E-Mails und E-Cards ohne vorherige Einwilligung des Empfängers als unzulässige Belästigung abgemahnt werden. Die integrierte Absender-Bestätigung (Double-Opt-In) sollte zwingend aktiv bleiben, um Missbrauch und Haftungsrisiken für den Seitenbetreiber zu minimieren.
- Google Fonts im Backend: Im Admin-Bereich (
admin/assets/tokens.css) werden aktuell Google Fonts per CDN eingebunden. Dritte, die dieses Plugin produktiv einsetzen möchten, müssen eigenverantwortlich entscheiden, ob sie diese durch Systemschriften oder lokale Einbindung ersetzen. - Gewährleistungs- und Haftungsausschluss (GPL-2.0+): Die Software wird „wie besehen“ (AS IS) ohne ausdrückliche oder stillschweigende Gewährleistung jeglicher Art zur Verfügung gestellt. Der Autor und Maintainer übernimmt keinerlei Haftung für direkte oder indirekte Schäden, rechtliche Abmahnungen, Bußgelder, Datenverlust oder Fehlfunktionen, die aus der Installation oder Nutzung dieses Plugins entstehen.
- Checkliste für Veröffentlichung: Detaillierte Hinweise und eine Schritt-für-Schritt-To-Do-Liste für einen datenschutzkonformen Produktiveinsatz sind in
PUBLIC_RELEASE_CHECKLIST.mddokumentiert.
Mail-Debug (Entwicklung)
Optional in wp-config.php:
define( 'BSKUDO_MAIL_DEBUG', true );
Bei aktivem Debug (oder auf lokalen Hosts wie .local, .test, localhost) schreibt das Plugin nach wp-content/uploads/bskudo-debug-private/mail.log und optional last-mail.html. Beim ersten Schreibvorgang legt es den Ordner an und erzeugt .htaccess (Deny from all) sowie index.php automatisch. Die letzten Log-Zeilen sind im Backend unter Einstellungen → Sicherheit einsehbar.
Im Git-Repository liegt nur debug/index.php als Schutz-Stub (Legacy-Fallback, falls Uploads nicht beschreibbar sind). Log-Dateien im Plugin-Ordner bleiben in .gitignore.
nginx-Beispiel (im Server-Block):
location ~ ^/wp-content/uploads/bskudo-debug-private/ {
deny all;
return 404;
}
Technische Entscheidungen
- Vanilla JS – kein jQuery im Frontend
- Minimale Datenspeicherung – Transients für Token, Rate Limit und geplante Jobs
- CSS-Namespace
.bskudo-– keine Konflikte mit Divi oder anderen Themes - WP Transients für Token und Rate Limiting
- wp_mail() für Versand – SMTP über externes Plugin empfohlen
- QR-Codes lokal via
chillerlan/php-qrcode(kein externer Dienst)
Prefix-Übersicht
| Kontext | Prefix |
|---|---|
| PHP-Funktionen | bskudo_ |
| PHP-Konstanten | BSKUDO_ |
| CSS-Klassen | .bskudo- |
| JavaScript | window.bskudo |
| Plugin-Slug | bs-kudo-karten |
Entwicklung
Entwickler: Tom Evers – bezugssysteme.de
Lizenz: GPL-2.0+
Composer-Abhängigkeiten aktualisieren:
cd wp-content/plugins/bs-kudo-karten
composer update --no-dev