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
}
#code #datalayer #ga4 #gtag #gtm #purchase #sea #thank #woocommerce #you