Skip to content

Commit dc45856

Browse files
committed
Added order tracking for Google Analytics 4 (#3092)
1 parent 0445e04 commit dc45856

File tree

2 files changed

+44
-1
lines changed
  • app
    • code/core/Mage/GoogleAnalytics/Block
    • design/frontend/base/default/template/googleanalytics

2 files changed

+44
-1
lines changed

app/code/core/Mage/GoogleAnalytics/Block/Ga.php

+43-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,9 @@ protected function _getOrdersTrackingCode()
129129
{
130130
/** @var Mage_GoogleAnalytics_Helper_Data $helper */
131131
$helper = $this->helper('googleanalytics');
132-
if ($helper->isUseUniversalAnalytics()) {
132+
if ($helper->isUseAnalytics4()) {
133+
return $this->_getOrdersTrackingCodeAnalytics4();
134+
} elseif ($helper->isUseUniversalAnalytics()) {
133135
return $this->_getOrdersTrackingCodeUniversal();
134136
}
135137

@@ -190,6 +192,46 @@ protected function _getOrdersTrackingCodeUniversal()
190192
return implode("\n", $result);
191193
}
192194

195+
/**
196+
* @return string
197+
* @throws Mage_Core_Model_Store_Exception
198+
*/
199+
protected function _getOrdersTrackingCodeAnalytics4()
200+
{
201+
$orderIds = $this->getOrderIds();
202+
if (empty($orderIds) || !is_array($orderIds)) {
203+
return '';
204+
}
205+
$collection = Mage::getResourceModel('sales/order_collection')
206+
->addFieldToFilter('entity_id', ['in' => $orderIds]);
207+
$result = [];
208+
/** @var Mage_Sales_Model_Order $order */
209+
foreach ($collection as $order) {
210+
$orderData = [
211+
'currency' => $order->getBaseCurrencyCode(),
212+
'transaction_id' => $order->getIncrementId(),
213+
'value' => number_format($order->getBaseGrandTotal(), 2),
214+
'coupon' => strtoupper($order->getCouponCode()),
215+
'shipping' => number_format($order->getBaseShippingAmount(), 2),
216+
'tax' => number_format($order->getBaseTaxAmount(), 2),
217+
'items' => []
218+
];
219+
220+
/** @var Mage_Sales_Model_Order_Item $item */
221+
foreach ($order->getAllVisibleItems() as $item) {
222+
$orderData['items'][] = [
223+
'item_id' => $item->getSku(),
224+
'item_name' => $item->getName(),
225+
'quantity' => $item->getQtyOrdered(),
226+
'price' => $item->getBasePrice(),
227+
'discount' => $item->getBaseDiscountAmount()
228+
];
229+
}
230+
$result[] = "gtag('event', 'purchase', " . json_encode($orderData, JSON_THROW_ON_ERROR) . ");";
231+
}
232+
return implode("\n", $result);
233+
}
234+
193235
/**
194236
* Render information about specified orders and their items
195237
*

app/design/frontend/base/default/template/googleanalytics/ga.phtml

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ $_accountId = $_helper->getAccountId();
2626
function gtag(){dataLayer.push(arguments);}
2727
gtag('js', new Date());
2828
gtag('config', '<?= $_accountId ?>');
29+
<?php echo $this->_getOrdersTrackingCodeAnalytics4() ?>
2930
</script>
3031
<!-- END GOOGLE ANALYTICS 4 CODE -->
3132
<?php elseif ($_helper->isUseUniversalAnalytics()): ?>

0 commit comments

Comments
 (0)