提问人:Anamul Hoque Sumon 提问时间:8/5/2023 最后编辑:VishwaAnamul Hoque Sumon 更新时间:8/6/2023 访问量:150
WooCommerce 的自定义 DataLayer 代码 |GA4系列
Custom DataLayer Code for WooCommerce | GA4
问:
我希望所有的专家都做得很好。https://brille-klubben.dk,我正在为客户的 WordPress WooCommerce 网站寻求解决方案。我需要在网站上跟踪购买事件。虽然我尝试了几种方法,但我已经能够成功地跟踪begin_checkout数据。但是,我的客户使用自定义重定向到另一个感谢页面,GTM4WP或PixelYourSite插件无法跟踪该页面。
考虑到这一点,我正在考虑在感谢页面上手动实现数据层。我对这个技术方面不是很熟悉,不知道有没有人可以帮我写代码来代替打印产品信息的动态代码。
感谢您的时间和专业知识。
这是演示代码,我需要用动态数据替换静态数据。
{
event: "purchase",
gsm: {uniqueEventId: 6, start: 1625823263950},
ecommerce: {
transaction_id: 174,
affiliation: "Online Store",
value: "2660",
tax: "0",
shipping: null,
currency: "BDT",
coupon: ",
items: [
{
item_name: "Printed Kurta",
item_id: 34,
price: 2660,
item_brand: "Gulljee",
item_category: "UNSTITCHED",
item_variant: "",
quantity: 1
}
]
}
}
WooCommerce 的 Datalayer 购买跟踪自定义订单接收页面!
答:
0赞
LoicTheAztec
8/5/2023
#1
下面是一个基于这个类似答案的代码示例,它使用 WooCommerce 普通的感谢页面:
add_action('wp_footer', 'order_received_js_script');
function order_received_js_script() {
// Only on order received" (thankyou)
if( ! is_wc_endpoint_url('order-received') )
return; // Exit
$order_id = absint( get_query_var('order-received') ); // Get the order ID
if( get_post_type( $order_id ) !== 'shop_order' ) {
return; // Exit
}
$order = wc_get_order( $order_id ); // Get the WC_Order Object
ob_start();
echo '{
event: "purchase",
gtm: {uniqueEventId: 6, start: '.$order->get_date_created()->getTimestamp().'},
ecommerce: {
transaction_id: '.$order->get_order_number().',
affiliation: "Online Store",
value: "'.$order->get_total().'",
tax: "'.$order->get_total_tax().'",
shipping: '.$order->get_shipping_total().',
currency: "'.$order->get_currency().'",
coupon: "'.implode(",", (array) $order->get_coupon_codes()).'",
items: [
';
foreach( $order->get_items() as $item_id => $item ) :
$product = $item->get_product();
$category = (array) wp_get_post_terms($item->get_product_id(), 'product_cat', array( 'fields' => 'names' ) );
$category = ! empty($category) ? reset($category) : "";
$brand = (array) wp_get_post_terms($item->get_product_id(), 'product_brand', array( 'fields' => 'names' ) );
$brand = ! empty($brand) ? reset($brand) : "";
$var_id = $item->get_variation_id() ? : "";
echo '{
item_name: "'.$item->get_name().'",
item_id: '.$item_id.',
price: '.wc_get_price_to_display($product).',
item_brand: "'. $brand .'",
item_category: "'. $category .'",
item_variant: "'. $var_id .'",
quantity: '.$item->get_quantity().'
}
';
endforeach;
echo ']
}
}';
$data = ob_get_clean();
?>
<script>
const myDataLayer = '<?php echo $data;?>';
</script>
<?php
}
您需要调整此代码,以便从自定义感谢页面获取正确的订单 ID,并进行一些修改以将其集成到您的脚本中。
相关:
评论
0赞
Anamul Hoque Sumon
8/6/2023
非常感谢您的努力,但我仍然感到困惑,如果我必须将我的自定义感谢页面端点 (tak-for-din-bestilling) 而不是 order-received,并将代码放在functions.php或自定义感谢页面的页脚中?
0赞
LoicTheAztec
8/6/2023
我说不出来,选择权在你。最重要的是,您需要从某个地方获取正确的订单 ID......由于此答案有效并回答了您最初的问题,请您接受此答案(要将答案标记为已接受,请单击答案旁边的复选标记以将其从灰色切换为已填写),谢谢。
评论