我想知道当用户刷新页面时,避免执行某些代码的标准方法是什么。我们有一个唯一的ID(订单号),所以我们可以将其保留在服务器端,无需设置cookie。
在我们的WooCommerce“谢谢你”页面上,我们将Facebook像素“购买”活动称为“购买”。然而,一些移动设备用户第二天打开浏览器,再次请求该页面,这会添加重复的像素事件,从而扭曲我们的数据。
我尝试了瞬态,但下面的代码没有导致事件触发。我安装了Transient Manager插件,但看不到任何设置,但我知道WPEngine确实有一些自定义项,这些自定义项可能会改变工作方式,尽管我不了解全部细节。
<?php
$transient_id = \'fbpixel-\' . $order->get_order_number();
if ( $order->get_subtotal() > 0 && ( false === ( $pixel_fired = get_transient( $transient_id ) ) ) ) :
set_transient( $transient_id, $order->get_order_number(), 3 * DAY_IN_SECONDS );
?>
<script>
fbq(\'track\', \'Purchase\', {currency: "AUD", value: <?php echo ($order->get_total() - $order->get_total_shipping()); ?> });
</script>
<?php endif; ?>
我的理解是,即使在到期之前,瞬态也可能在任何时候被无故删除,因此它们可能不是合适的解决方案。
最合适的回答,由SO网友:Chetan Vaghela 整理而成
您可以使用order post meta检查订单是否已经存在。尝试以下代码。如果这对你有帮助,请告诉我。
$order_id = $order->get_id();
$fbpixel = get_post_meta($order_id, \'fbpixel-\'.$order->get_order_number(),true);
if ( $order->get_subtotal() > 0 && ( empty( $fbpixel ) ) ) :
update_post_meta($order_id, \'fbpixel-\'.$order->get_order_number(),1);
?>
<script>
fbq(\'track\', \'Purchase\', {currency: "AUD", value: <?php echo ($order->get_total() - $order->get_total_shipping()); ?> });
</script>
<?php endif;