Двойная загрузка страницы благодарности WooCommerce будет дублировать отслеживание конверсий?

Я реализовал собственный скрипт на странице 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
719
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать пользовательские метаданные заказа, чтобы избежать дублирования отслеживания конверсий следующим образом:

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 активной дочерней темы (или активной темы). Это должно работать.

Мне просто любопытно кое-что, зачем это нужно? if ( ! function_exists( 'pixel_analytics_conversion_track_script' ) ) {

svelandiag 15.12.2020 16:01

@svelandiag Только что взято из вашего кода: это позволяет быть уверенным, что имя функции pixel_analytics_conversion_track_script еще не определено плагином, вашей темой или другим пользовательским скриптом, поэтому в этом нет необходимости…

LoicTheAztec 15.12.2020 19:17

Если вы разрешите условное 'done' === get_post_meta( $order_id, '_pixel_tracking', true ), оно никогда не попадет. Я использовал вашу версию, и она никогда не отслеживает конверсии, мне пришлось изменить оператор if на get_post_meta( $order_id, '_pixel_tracking', true ) != 'done'

svelandiag 23.12.2020 16:09

@svelandiag Hum, извините, да, обновлено && 'done' !== get_post_meta( $order_id, '_pixel_tracking', true )… Теперь все работает, как и ожидалось.

LoicTheAztec 23.12.2020 18:23

Другие вопросы по теме