Deze code is voor het toevoegen van een gtag datalayer purchase event. Er zijn 2 versies: GA4 en GTM.

GA4

add_action('woocommerce_thankyou', 'wbmz_add_gtm_jootjes_purchase_event', 10, 1);
function wbmz_add_gtm_jootjes_purchase_event($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    $transaction_id = $order->get_id();
    $transaction_value = floatval($order->get_total());
    $transaction_tax = floatval($order->get_total_tax());
    $transaction_shipping = floatval($order->get_shipping_total());
    $transaction_currency = $order->get_currency();
    $transaction_coupon = $order->get_coupon_codes() ? implode(", ", $order->get_coupon_codes()) : '';

    $items = [];
    foreach ($order->get_items() as $item_id => $item) {
        $product = $item->get_product();
        if (!$product) {
            continue;
        }

        // Haal de categorieën op en splits ze op in afzonderlijke velden
        $categories = wc_get_product_category_list($product->get_id(), ',');
        $categories_array = explode(',', strip_tags($categories));

        // Maak item_category velden
        $item_categories = [];
        foreach ($categories_array as $index => $category) {
            $item_categories["item_category" . ($index + 1)] = trim($category);
        }

        // Bereid het item voor
        $item_data = [
            'item_id' => $product->get_sku() ? $product->get_sku() : $product->get_id(),
            'item_name' => $item->get_name(),
            'affiliation' => get_bloginfo('name'),
            'index' => $item_id,
            'item_brand' => $product->get_attribute('brand') ?: '',
            'item_variant' => $product->get_attribute('pa_variant') ?: '',
            'price' => floatval($product->get_price()),
            'quantity' => intval($item->get_quantity()),
        ];

        // Voeg coupon en discount toe als er een coupon is
        if ($transaction_coupon) {
            $item_data['coupon'] = $transaction_coupon;
            $item_data['discount'] = floatval($item->get_subtotal() - $item->get_total());
        }

        // Voeg categorieën toe aan het item
        $items[] = array_merge($item_data, $item_categories);
    }

    ?>
    <script>
        gtag("event", "purchase", {
            transaction_id: "<?php echo esc_js($transaction_id); ?>",
            value: <?php echo esc_js($transaction_value); ?>,
            tax: <?php echo esc_js($transaction_tax); ?>,
            shipping: <?php echo esc_js($transaction_shipping); ?>,
            currency: "<?php echo esc_js($transaction_currency); ?>",
            <?php if ($transaction_coupon) : ?>
            coupon: "<?php echo esc_js($transaction_coupon); ?>",
            <?php endif; ?>
            items: <?php echo json_encode($items); ?>
        });
    </script>
    <?php
}

GTM

add_action('woocommerce_thankyou', 'wbmz_add_gtm_purchase_datalayer', 10, 1);
function wbmz_add_gtm_purchase_datalayer($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    $transaction_id = $order->get_id();
    $transaction_value = floatval($order->get_total());
    $transaction_tax = floatval($order->get_total_tax());
    $transaction_shipping = floatval($order->get_shipping_total());
    $transaction_currency = $order->get_currency();
    $transaction_coupon = $order->get_coupon_codes() ? implode(", ", $order->get_coupon_codes()) : '';

    $items = [];
    foreach ($order->get_items() as $item_id => $item) {
        $product = $item->get_product();
        if (!$product) {
            continue;
        }

        // Haal de categorieën op en splits ze op in afzonderlijke velden
        $categories = wc_get_product_category_list($product->get_id(), ',');
        $categories_array = explode(',', strip_tags($categories));

        // Maak item_category velden
        $item_categories = [];
        foreach ($categories_array as $index => $category) {
            $item_categories["item_category" . ($index + 1)] = trim($category);
        }

        // Bereid het item voor
        $item_data = [
            'item_id' => $product->get_sku() ? $product->get_sku() : $product->get_id(),
            'item_name' => $item->get_name(),
            'affiliation' => get_bloginfo('name'),
            'price' => floatval($product->get_price()),
            'quantity' => intval($item->get_quantity()),
        ];

        // Voeg coupon en discount toe als er een coupon is
        if ($transaction_coupon) {
            $item_data['coupon'] = $transaction_coupon;
            $item_data['discount'] = floatval($item->get_subtotal() - $item->get_total());
        }

        // Voeg categorieën toe aan het item
        $items[] = array_merge($item_data, $item_categories);
    }

    ?>
    <script>
        dataLayer = dataLayer || [];
        dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.
        dataLayer.push({
            event: "purchase",
            ecommerce: {
                transaction_id: "<?php echo esc_js($transaction_id); ?>",
                value: <?php echo esc_js($transaction_value); ?>,
                tax: <?php echo esc_js($transaction_tax); ?>,
                shipping: <?php echo esc_js($transaction_shipping); ?>,
                currency: "<?php echo esc_js($transaction_currency); ?>",
                <?php if ($transaction_coupon) : ?>
                coupon: "<?php echo esc_js($transaction_coupon); ?>",
                <?php endif; ?>
                items: <?php echo json_encode($items); ?>
            }
        });
    </script>
    <?php
}
Geef een reactie 0