Besuche unseren Sponsor
Bad Dream - Entertainment & Service

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.

7 Comments

Add a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert