Условная логика и пользовательские пиксели FB Интеграция в WooCommerce

Я стремлюсь:

1) Fire FB Pixel на странице оформления заказа WooCommerce — связанные события. (т.е. добавить в корзину/начать оформление заказа)

2) Событие Fire Purchase на странице оформления заказа/странице благодарности WooCommerce.

3) Оставьте FB Pixel в обычном режиме на всех сайтах, которые не являются частью двух вышеуказанных.

Мне сказали, что условная логика — это путь. Тем не менее, я не понимаю, как включить приведенный ниже крючок (в моем втором посте) в мое утверждение «elseif».

Скрипт №1

add_action( 'wp_head', 'facebook_tracking' );

function facebook_tracking() {

if ( is_checkout() && is_wc_endpoint_url( 'order-received' ) ) {

// TARGET THE CHECKOUT PAGE WITH is_checkout()
// THEN EXCLUDE THE THANK YOU PAGE USING CONDITIONAL LOGIC

    ?>
        <!-- Facebook Pixel Code for Initiated Checkout -->
     <script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'XXX');
  fbq('track', 'PageView');
  fbq('track', 'InitiateCheckout');
  fbq('track', 'AddToCart');
</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=[]&ev=PageView&noscript=1"
/></noscript>
        <!-- End Facebook Pixel Code -->
  // NOW MY THANK YOU PAGE - I WANT TO EMBED AN ADDITIONAL ADD_ACTION BUT HOW? - SEE MY NEXT MESSAGE
    <?php } elseif ( is_wc_endpoint_url( 'order-received' ) ) { ?>
  <!-- Facebook Pixel Code for Conversions -->
<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'XXX');
  fbq('track', 'PageView');
  fbq('track', 'Purchase', {
    value: <?php echo $order->get_total(); ?>,
    currency: 'AUD',
  });

</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=1552143158136128&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
 <?php } else { // FINALLY WE TARGET ALL THE OTHER PAGES ?>
<!-- Facebook Pixel Code for Rest of Website -->
<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'XXX');
  fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=[]&ev=PageView&noscript=1"
/></noscript>
        <!-- End Facebook Pixel Code -->
    <?php
} 

}

Скрипт №2

Как мне вставить следующий хук в мой оператор elseif:

    function purchase_analytics( $order_id ) {
    $order = new WC_Order( $order_id );
    $currency = $order->get_order_currency();
    $total = $order->get_total();
    $date = $order->order_date;
    $checkout_subtotal = $order->get_subtotal();
    ?>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'XXX');
</script>
<script>
fbq('track', 'Purchase', {
value: <?php echo $order->get_total(); ?>,
currency: 'AUD'
});
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=[]&ev=PageView&noscript=1"
/></noscript>
<!-- DO NOT MODIFY -->
<!-- End Facebook Pixel Code -->
    <?php   
}
add_action( 'woocommerce_thankyou', 'purchase_analytics' );

Любая помощь приветствуется!

Лоик смотрите ниже:

add_action( 'wp_head', 'facebook_tracking' );
function facebook_tracking() {

    // 1. Common script -  On ALL Pages --> works fine
    $init = 'XXX';
    ?>
     <script>
    !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
    n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)}(window, document,'script',
    'https://connect.facebook.net/en_US/fbevents.js');

    fbq('init', <?php echo $init; ?>);
    fbq('track', 'PageView');
    <?php

    // 2. On Checkout --> works fine, how do I call for values of the below, particularly InitiateCheckout?
    if( ! is_wc_endpoint_url( 'order-received' ) && is_checkout() ) :
    ?>
    fbq('track', 'InitiateCheckout');
  value:
  currency: ''
    fbq('track', 'AddToCart');
    <?php

    // 3. On Order received --> not currently firing.
    elseif( is_wc_endpoint_url( 'order-received' ) ) :

    global $wp;

    // Get the Order ID from Query vars
    $order_id  = absint( $wp->query_vars['order-received'] );
    if ( $order_id > 0 ){

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );
      // is this ok? foreach( $order->get_items() as $item_id => $item ){
        // is this ok? $product = $item->get_product();
        // is this ok? $product_id = $item->get_product_id();
    $currency = $order->get_order_currency();
    $total = $order->get_total();
    $date = $order->order_date;
      }
    ?>
    fbq('track', 'Purchase', {
        value:    <?php echo $order->get_total(); ?>,
        currency: <?php echo $order->get_order_currency(); ?>,
      content_ids: <?php echo $item->get_product_id(); ?>,
      // content_type: ???
    });
    <?php
      }

    // 4. Other pages (EXCEPT order received and checkout) --> did not work originally but want to fire this on my upsell page (1 specific URL). Custom Event based.
    else ; //was needing ; not :
    ?>
    fbq('track', 'CUSTOMEVENT');
    <?php
    endif;
    ?>
    </script>
    <noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=[XXX]&ev=PageView&noscript=1"
/></noscript>
<?php
  }
}

Ценю вашу помощь.


person sys0s    schedule 29.11.2018    source источник


Ответы (1)


Обновлено. В вашей перехваченной функции, подключенной к перехватчику wp_head, два из ваших условий по ошибке нацелены на "Заказ получен", поэтому:

if ( is_checkout() && is_wc_endpoint_url( 'order-received' ) ) {

то же самое, что просто:

if ( is_wc_endpoint_url( 'order-received' ) ) {

Есть какие-то повторяющиеся (общий скрипт, который можно использовать везде)…

Кажется, есть еще какие-то ошибки… Попробуйте следующий пересмотренный код:

add_action( 'wp_head', 'facebook_tracking' );
function facebook_tracking() {

    // 1. Common script -  On ALL Pages
    $init = 'XXX';
    ?>
     <script>
    !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
    n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)}(window, document,'script', 
    'https://connect.facebook.net/en_US/fbevents.js');

    fbq('init', <?php echo $init; ?>);
    fbq('track', 'PageView');
    <?php

    // 2. On Checkout
    if( ! is_wc_endpoint_url( 'order-received' ) && is_checkout() ) : 
    ?>
    fbq('track', 'InitiateCheckout');
    <?php 

    // 3. On Order received 
    elseif( is_wc_endpoint_url( 'order-received' ) ) : 

    global $wp;

    // Get the Order ID from Query vars
    $order_id  = absint( $wp->query_vars['order-received'] );
    if ( $order_id > 0 ){

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id ); 
    ?>
    fbq('track', 'Purchase', {
        value:    <?php echo $order->get_total(); ?>,
        currency: <?php echo $order->get_order_currency(); ?>,
    });
    <?php 
    } 

    // 4. Other pages (EXCEPT order received and checkout)
    else : 
    ?>
    fbq('track', 'AddToCart');
    <?php 
    endif;
    ?>
    </script>
    <noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=1552143158136128&ev=PageView&noscript=1"
/></noscript>
    <?php
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Это должно работать.

person LoicTheAztec    schedule 29.11.2018
comment
Мерси Лоик! Вы легенда. Я просмотрел почти все ваши посты. Спасибо за то, что вы делаете. У меня была проблема с функцией else, она должна была быть else ; emoji [;)] Однако у меня по-прежнему не срабатывает пиксель покупки с соответствующими параметрами значения и валюты. Я также хотел бы, чтобы ID продукта и product_content_type передавались в FB. Я бы предположил, что docs.woocommerce.com/wc-apidocs/class-WC_Product. html пригодится? Пожалуйста, смотрите мои правки выше: - person sys0s; 30.11.2018