Mit WP-Wartung24 biete ich diverse technische Dienstleistungen für WordPress an. Es kommt dabei immer wieder vor, dass andere WordPress-Dienstleister und Webdesigner meine Leistungen empfehlen möchten. Damit dies einfacher möglich ist, wollte ich ein eigenes kleines Affiliate-System haben. Wie ich das realisiert habe, erkläre ich in diesem Beitrag.
Vorüberlegungen
Ich biete zwar einige pauschalisierte Leistungen an, trotzdem ist eine Online-Bestellung meiner Dienstleistungen nicht immer möglich. Eine vorherige Kontaktaufnahme vor Auftragserteilung macht in vielen Fällen Sinn. Deswegen sind klassische Affiliate-Programme, die auf bestimmte Bestellvolumen oder Ähnliches greifen, nicht einsetzbar. Es musste also eine eigenständige Lösung her, mit der mir bei einer Kontakaufnahme durch einen Interessenten mitgeteilt wird, dass er auf Empfehlung zu mir kam. Für den Empfehlenden soll es zusätzlich einfach sein, meine Leistungen zu empfehlen.
Gewünschtes System
Im Prinzip ist das gewünschte System ganz einfach:
- der Empfehlende soll beliebige Seiten meiner Website verlinken können
- entsteht daraufhin ein Kontakt, möchte ich mitbekommen, woher die Empfehlung kommt
Es scheint sinnvoll zu sein, dass der Empfehlende seine Links auf mein Angebot um einen URL-Parameter ergänzt. Nehmen wir an, es handelt sich um den fiktiven Dienstleister WP Agentur, dann könnten die Links folgendermassen aussehen:
www.wp-wartung24.de/?ref=wp-agentur
Dabei kann der URL-Parameter an jede beliebige URL der Seite angehängt werden.
Erster Schritt: URL-Parameter auslesen
Da ein Besucher sich ja auf verschiedenen Unterseiten einer Website aufhalten kann, muss die Information des URL-Parameters längerfristig erhalten bleiben, weswegen ich mich für ein Cookie entschieden habe.
Um den URL-Parameter auszulesen und in ein Cookie zu speichern, nutze ich ein Plugin:
Das Plugin ist sehr einfach gestrickt. Trotzdem könnte man das Ganze natürlich mit ein paar Zeilen Code im Child-Theme oder Custom-Plugin auch selbst erreichen. Der Bequemlichkeit halber habe ich mich aber für das Plugin entschieden.
In den Einstellungen des Plugins definiert man den zu prüfenden URL-Parameter und gibt die Cookie-Lebensdauer an. Das Cookie hat denselben Namen wie der URL-Parameter. In meinem Beispiel hat das Cookie eine Lebensdauer von 3 Tagen.
Somit haben wir nun aufgrund des URL-Parameters ein Cookie mit der gewünschten Information gespeichert. Jetzt muss die Info nur noch zu mir kommen.
Zweiter Schritt: Kontakt- und Bestellformulare
Auf meiner Website befinden sich diverse Formulare. Zum einen einfache Kontaktformulare, zum anderen „echte“ Bestellvorgänge, die auch über Formulare realisiert sind. In all diesen Fällen soll die Affiliate-Information übertragen werden.
Ich nutze für meine Formulare TorroForms, ein recht neues FormBuilder-Plugin aus der deutschen Community. Besonderheit des Plugins ist, dass man an vielen Stellen eingreifen kann und mit ein paar Zeilen eigenem Code Anpassungen vornehmen kann. Die zugehörige API ist gut dokumentiert.
Wie die Formulare am Ende aufgebaut sind, ist reichlich egal. Deswegen erspare ich mir hier Details… 😉
Dritter Schritt: Wie kommt die Cookie-Info in das Formular?
Dies ist der eigentlich entscheidende Schritt. Und auch der Schritt, an dem ich am längsten gebastelt habe. Das CookieMonster-Plugin erstellt für jeden gespeicherten URL-Parameter einen eigenen Shortcode, den man dann auf den eigenen Seiten verwenden könnte. In meinem Fall wäre das also ein
[[ref]]
Diesen Code müsste ich in die Benachrichtigungs-E-Mail des TorroForms-Formular einbinden. Der Beitrag könnte also hier zu Ende sein. Ist er aber nicht, denn leider werden Shortcodes von TorroForms beim Erzeugen der Benachrichtigungsmails nicht ausgewertet. Auch gibt es in TorroForms viele Hooks, um eigene Funktionalität nachzurüsten. Allerdings genau an dieser Stelle nicht.
Nach Rücksprache mit Sven Wagener, dem Autor des Plugins, hat er mir empfohlen, einen eigenen Template-Tag für TorroForms zu definieren. Diese Template-Tags werden genutzt, um die Benachrichtigungs-Mails individuell gestalten zu können und die verfügbaren Feld-Daten einzubinden.
Da ich mit einem Child-Theme arbeite, konnte ich die Template-Tag-Erweiterung direkt in mein Theme einbinden. Ersatzweise gehört der Code in ein Custom-Plugin. Der Code dazu sieht dann so aus:
<?php /** * Core: Torro_TemplateTags_WPW24 class */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Torro Forms template tags for WPW24 handler class * * Handles template tags for WPW24. * */ final class Torro_Templatetags_WPW24 extends Torro_TemplateTags { /** * Instance * * @var null|Torro_Templatetags_WPW24 */ private static $instance = null; public static function instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } protected function init() { $this->title = __( 'WPW24', 'torro-forms' ); $this->name = 'WPW24'; $this->description = __( 'WPW24 Templatetags', 'torro-forms' ); } /** * Adding all tags of class */ public function tags() { $this->add_tag( 'referral', __( 'Referral', 'torro-forms' ), __( 'Adds the referral cookie content.', 'torro-forms' ), array( $this, 'referral' ) ); } /** * %sitename% */ public function referral() { if ( !isset($_COOKIE["ref"])) { return '-'; } return $_COOKIE["ref"]; } } torro()->templatetags()->register( 'Torro_Templatetags_WPW24' );
Im Prinzip wird eine neue Klasse für Template-Tags definiert, die dann nur einen einzigen Tag erstellt, namens referral. In der zugehörigen Funktion wird dann definiert, was ausgegeben werden soll, nämlich der Cookie-Inhalt.
Ich habe die Definition in eine torroforms.php gepackt und dann in meiner functions.php einfach eingefügt.
/* * Add special TorroForms template tags */ require_once('torroforms.php');
Als Ergebnis dieser Bemühungen zeigt die Liste der Template-Tags nun eine weitere Gruppe von WPW24-spezifischen Tags.
Fazit
Das war es dann auch schon. Wurde ein Referral-Parameter gesetzt, wird dieser nun in allen Formularen übermittelt, in denen ich das oben gezeigte Template-Tag eingebunden habe. Somit weiß ich immer, wer den Interessenten empfohlen hat.
Das System hat natürlich Nachteile: die Affiliates haben keinen eigenen Überblick über mögliche Leads und Aufträge. Allerdings ist das System ja auch nur für Kollegen und Partner gedacht, mit denen ich sowieso ständig in Kontakt stehe. Das Vertrauensverhältnis ist also sowieso schonmal da. Und Außenstehende dürfen mir ihre Kennung beliebig häufig übermitteln, daraus entsteht nicht automatisch ein Affiliate-Anspruch. 😉
Ich bin sehr zufrieden, mit recht einfachen Mitteln die gewünschte Funktion realisiert zu haben.
Wie hättet ihr das gelöst? Freue mich über Anregungen in den Kommentaren.
Gute Idee, allerdings missfällt mir dein Codestyle 😀
Ich habe das mal refactored -> https://gist.github.com/derpixler/de1d57ebe1a60d290855cf228880bfc0
1.Du Prüfst nicht ob Toro wirklich geladen wurde und verlässt dich einfach so darauf.
https://gist.github.com/derpixler/de1d57ebe1a60d290855cf228880bfc0#file-toro-form-ref-cookie-transmitter-php-L6
2. Die Textdomain „‚torro-forms‘ verwendest du mehrfach, vermeide Redundanzen, vermeidet Fehler.
https://gist.github.com/derpixler/de1d57ebe1a60d290855cf228880bfc0#file-toro-form-ref-cookie-transmitter-php-L25
3. Halte es einfach kürze ab.
https://gist.github.com/derpixler/de1d57ebe1a60d290855cf228880bfc0#file-toro-form-ref-cookie-transmitter-php-L33
4. Isset() ist unzureichend, etwas kann da sein muss aber nicht gefüllt sein und wenn ein key nicht existiert gibt es Warnungen.
https://gist.github.com/derpixler/de1d57ebe1a60d290855cf228880bfc0#file-toro-form-ref-cookie-transmitter-php-L67
So das wars ich habe das nicht getestet 😀
Hallo René!
Danke für deine Tipps. Bei Punkt 2 und 3 wende dich bitte direkt an den Autor von TorroForms, den kennst du ja glaube ich auch. 🙂
Punkt 4 nehme ich auf meine Kappe, meine mangelnde Routine hat da zugeschlagen.
Punkt 1 ist natürlich richtig, auch mein Fehler. Ich habe den Code direkt aus TorroForms kopiert, da wird das natürlich nicht mehr an dieser Stelle geprüft.
Marc