Я реализовал собственный скрипт на странице tankyou в своем магазине woocommerce для отслеживания конверсий рекламы Google. Это моя реализация:
add_action( "woocommerce_thankyou", "pixel_analytics_conversion_track_script", 20 );
if ( ! function_exists( 'pixel_analytics_conversion_track_script' ) ) {
function pixel_analytics_conversion_track_script( $order_id ) {
if ( $order_id > 0 ) {
$order = wc_get_order( $order_id );
if ( $order instanceof WC_Order ) {
$order_id = $order->get_id(); // order id
$order_key = $order->get_order_key(); // order key
$order_total = $order->get_total(); // order total
$order_currency = $order->get_currency(); // order currency
$order_payment_method = $order->get_payment_method(); // order payment method
$order_shipping_country = $order->get_shipping_country(); // order shipping country
$order_billing_country = $order->get_billing_country(); // order billing country
$order_status = $order->get_status(); // order status
?>
<script type = "text/javascript">
jQuery(document).ready(function( $ ){
console.info('PURCHACE EVENT');
/* Track conversion on facebook Pixel */
fbq('track', 'Purchase',
{
value: <?php echo $order_total ?>,
currency: "<?php echo $order_currency ?>"
});
/* Track conversion on Google Ads */
gtag('event', 'conversion',
{
'send_to': 'AW-693771414/0MhwCMa9rLYBEJa56MoC',
'value': <?php echo $order_total ?>,
'currency': "<?php echo $order_currency ?>",
'transaction_id': "<?php echo $order_id ?>"
});
});
</script>
<?php
}
}
}
}
Код работает очень хорошо, но некоторые данные неточны, и я думаю, что приведенный выше код, вероятно, дублирует конверсию, если пользователь дважды переходит на страницу благодарности. У нас есть электронное письмо с подтверждением заказа, в котором есть ссылка на страницу благодарности woocommerce.
Как видите, я отправляю параметр transaction_id
, поэтому мой вопрос:
Если пользователь дважды или N раз загружает страницу благодарности, конверсия будет дублироваться в объявлениях Google, даже если вы отправите параметр transaction_id
?
Вы можете использовать пользовательские метаданные заказа, чтобы избежать дублирования отслеживания конверсий следующим образом:
add_action( "woocommerce_thankyou", "pixel_analytics_conversion_track_script", 20 );
if ( ! function_exists( 'pixel_analytics_conversion_track_script' ) ) {
function pixel_analytics_conversion_track_script( $order_id ) {
// Avoid if pixel analytics conversion track script has been run before
if ( $order_id > 0 && 'done' !== get_post_meta( $order_id, '_pixel_tracking', true ) ) {
$order = wc_get_order( $order_id );
if ( is_a($order, 'WC_Order') ) {
$order_id = $order->get_id(); // order id
$order_key = $order->get_order_key(); // order key
$order_total = $order->get_total(); // order total
$order_currency = $order->get_currency(); // order currency
$order_payment_method = $order->get_payment_method(); // order payment method
$order_shipping_country = $order->get_shipping_country(); // order shipping country
$order_billing_country = $order->get_billing_country(); // order billing country
$order_status = $order->get_status(); // order status
?>
<script type = "text/javascript">
jQuery(document).ready(function( $ ){
console.info('PURCHACE EVENT');
/* Track conversion on facebook Pixel */
fbq('track', 'Purchase',
{
value: <?php echo $order_total ?>,
currency: "<?php echo $order_currency ?>"
});
/* Track conversion on Google Ads */
gtag('event', 'conversion',
{
'send_to': 'AW-693771414/0MhwCMa9rLYBEJa56MoC',
'value': <?php echo $order_total ?>,
'currency': "<?php echo $order_currency ?>",
'transaction_id': "<?php echo $order_id ?>"
});
});
</script>
<?php
// Flag the order (with custom meta data) to avoid pixel analytics conversion track script run multiple times.
update_post_meta( $order_id, '_pixel_tracking', true );
}
}
}
}
Код находится в файле functions.php активной дочерней темы (или активной темы). Это должно работать.
@svelandiag Только что взято из вашего кода: это позволяет быть уверенным, что имя функции pixel_analytics_conversion_track_script
еще не определено плагином, вашей темой или другим пользовательским скриптом, поэтому в этом нет необходимости…
Если вы разрешите условное 'done' === get_post_meta( $order_id, '_pixel_tracking', true )
, оно никогда не попадет. Я использовал вашу версию, и она никогда не отслеживает конверсии, мне пришлось изменить оператор if на get_post_meta( $order_id, '_pixel_tracking', true ) != 'done'
@svelandiag Hum, извините, да, обновлено && 'done' !== get_post_meta( $order_id, '_pixel_tracking', true )
… Теперь все работает, как и ожидалось.
Мне просто любопытно кое-что, зачем это нужно?
if ( ! function_exists( 'pixel_analytics_conversion_track_script' ) ) {