Woocommerce – Adcell Tracking Code auf Bestellbestätigungsseite einbinden
Theoretisch sollte es kein Problem sein, einen Tracking Code auf der Bestätigungsseite eines Woocommerce-Shops einzubinden. Theoretisch. Praktisch kann einiges schieflaufen.
Es fängt schon damit an, dass das Germanized Plugin für Woocommerce einiges am Shop ändert. So wurde bei einem eingedeutschten Shop entgegen der Beteuerung der Germanized-Entwickler die thankyou-Action nicht gefeuert. Weiter geht es mit Codes, die man von den Adcell-Mitarbeitern erhält, „die Ihr einfach einbinden müsst“, die sich aber völlig von den Codes in der Dokumentation unterscheiden und einfach fehlerhaft sind. Erhält man dann noch telefonisch die Information, dass man die bid (die ID des Kunden, der die Anzeige in seiner Seite schaltet) nicht benötigt und man doch einfach den Code, den man erhalten hat einzubinden hat … Mann, Mann, Mann Achim.
Fangen wir also mal an, das Ganze aufzudröseln.
Natürlich benötigen wir die bid
Ganz klar. Wie soll sonst das Tracking funktionieren. Die ID kommt als GET Parameter über die URL, wenn jemand auf einer Seite auf unsere Werbung klickt und zu unserem Shop weitergeleitet wird. Diese speichern wir ab, z.B. als Cookie.
function set_adcell_cookie() { global $wp; if ( !is_admin()) { setcookie('bid', $_GET['bid'], 1 * DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false); } } add_action( 'init', 'set_adcell_cookie');
So können wir diese dann nach Kaufabschluss in den Tracking Code einbauen.
Alternative für thankyou
Danke für nichts. Wenn wegen diversen Plugins, die Woocommerce verändern, die entsprechende Action nicht gefeuert wird, müssen wir eben schmutzig vorgehen. Dann holen wir uns den Status eben manuell aus der URL, da die Endpunkte für den Bestell- und Bezahlvorgang an die URL angehangen wird. In unserem Fall heißt der Parameter auf der Bestätigungsseite „order-received“.
function adcell_tracking( $order_id ) { global $wp; if (is_checkout() && !empty($wp->query_vars['order-received'])) { ... } } add_action( 'template_redirect', 'adcell_tracking' );
Tracking Code
Für den Tracking Code benötigen wir folgende Parameter:
- eventid (fest vergeben)
- pid (fest vergeben)
- referenz (eindeutige ID der Bestellung)
- betrag (Nettobetrag der Bestellung)
- bid
Die OrderId holen wir ebenfalls aus der URL, die hängt am Parameter „order-received“. Per OrderId können wir das Order-Objekt auslesen und erhalten daraus den Nettobetrag. Die bid haben wir uns im Cookie gespeichert.
$orderId = $wp->query_vars['order-received']; $order = new WC_Order($orderId); $subtotal = $order->get_subtotal(); $bid = $_COOKIE['bid'];
Nun können wir den Tracking Code zusammensetzen. Die Vorlage des Codes holen wir uns am Besten direkt aus dem Beispiel in unserem Adcell-Account. Vergesst die schlauen Ratschläge vom Adcell Support.
<script type="text/javascript" src="//www.adcell.de/js/track.js?eventid=1234&pid=5678&referenz=<?php echo $orderId; ?>&betrag=<?php echo $subtotal; ?>&bid=<?php echo $bid; ?>"></script> <noscript> <img src="//www.adcell.de/event.php?pid=5678&eventid=1234&referenz=<?php echo $orderId; ?>&betrag=<?php echo $subtotal; ?>&bid=<?php echo $bid; ?>" border="0" width="1" height="1"> </noscript>
Hier noch mal der ganze Code für die Tracking-Funktion:
add_action( 'template_redirect', 'adcell_tracking' ); function adcell_tracking( $order_id ) { global $wp; if (is_checkout() && !empty($wp->query_vars['order-received'])) { $orderId = $wp->query_vars['order-received']; $order = new WC_Order($orderId); $subtotal = $order->get_subtotal(); $bid = $_COOKIE['bid']; ?> <script type="text/javascript" src="//www.adcell.de/js/track.js?eventid=1234&pid=5678&referenz=<?php echo $orderId; ?>&betrag=<?php echo $subtotal; ?>&bid=<?php echo $bid; ?>"></script> <noscript> <img src="//www.adcell.de/event.php?pid=5678&eventid=1234&referenz=<?php echo $orderId; ?>&betrag=<?php echo $subtotal; ?>&bid=<?php echo $bid; ?>" border="0" width="1" height="1"> </noscript> <?php } }
Das Ganze kann man in ein eigenes WordPress-Plugin packen und das war’s. Gar nicht schwer. Wenn man es selber macht.
Ich hoffe wie immer, diese erstbeste Lösung war hilfreich.
Update 05.03.2021
Wie Mario in den Kommentaren korrekt feststelle, hatte sich ein Fehler im Code eingeschlichen. Im Tracking-Code war die Variable für die OrderId falsch (falsch: $order_id, richtig: $orderId). Danke Mario.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
Hi, Danke für die tolle Beschreibung! Ich habe genau diese Problem und das auch erst seitdem ich Germanized aktiviert habe. Ich bin kein großer Code-Spezialist und verstehe das alles nur grob. Ich nehme an die oberen beiden Code Snippets kommen in die „functions.php“ und der die unteren Skripte in den Footer. Beim dritten Code Snippet bin ich mir nicht sicher.
Wäre Super wenn du mir Hilfestellung geben könntest.
Grüße Karl
Hallo Karl,
Du kannst das alles in die functions.php packen. Die unteren beiden Snippets schreibst Du in die If-Anweisung der im Text beschriebenen Funktion „adcell_tracking“. Und darauf achten, dass der HTML Tracking-Code im letzten Snippet außerhalb der php-Klammern stehen muss.
Ich hab den kompletten Code der Funktion im Text noch ergänzt. Ich hoffe, das hilft Dir.
Hi!!
Vielen vielen Dank für Deine Mühen 🙂 Hat super funktioniert!
Habe order_id zu OrderId angepasst dann hat es geklappt:
Ups, ist natürlich richtig. Danke Mario!
Hab das im Beitrag geändert.
Hallo,
danke für das Code-Gedöhns! 🙂
ich hab das Ganze in die functions.php gepackt, aber in die Error Logs wird alle paar Sekunden das hier geschrieben:
Got error ‚PHP message: PHP Warning: Use of undefined constant DAYS_IN_SECONDS – assumed ‚DAYS_IN_SECONDS‘ (this will throw an Error in a future version of PHP)
Ich hab leider keine Ahnung, wie ich selbst ein Plugin erstellen kann damit. Kannst du mir das Plugin bitte an meine Mail-Adresse schicken? Das wäre ganz lieb.
Vielen Dank,
Martin
Oh sorry, Martin. Das ist ein Fehler im Code des Artikels. Die WordPress Konstante muss DAY_IN_SECONDS heißen. Wenn Du das änderst, verschwinden die Warnungen.
Ich ändere das auch im Artikel. Danke für den Hinweis.