Я стараюсь:
1) Fire FB Pixel на странице оформления заказа WooCommerce — связанные события, которые есть. (т.е. добавить в корзину / инициировать заказ)
2) Пожарная покупка на странице оформления заказа / странице благодарности WooCommerce.
3) Сохраняйте FB Pixel как нормальный для всех сайтов, которые не являются частью вышеупомянутых двух.
Мне сказали, что условная логика — это путь. Тем не менее, я озадачен тем, как включить хук ниже (в моем 2-м посте) в мое заявление «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' );
Любая помощь приветствуется!
Loic, пожалуйста, смотрите ниже:
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
}
}
Ценю твою помощь.
обновленный — В вашей подключенной функции подключен wp_head
hook, два ваших условия нацелены на «Заказ получен» по ошибке, поэтому:
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 вашей активной дочерней темы (или активной темы). Это должно работать.
Других решений пока нет …