我只想在“谢谢”页面上运行一次脚本

时间:2019-10-01 作者:Nick P

我想知道当用户刷新页面时,避免执行某些代码的标准方法是什么。我们有一个唯一的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; ?>
我的理解是,即使在到期之前,瞬态也可能在任何时候被无故删除,因此它们可能不是合适的解决方案。

1 个回复
最合适的回答,由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;

相关推荐

避免多次加载Facebook按钮和统计数据

当我的网站加载单个帖子时,一些带有相关统计信息的Facebook按钮(共享、保存等)会显示在三个不同的位置:帖子的顶部和底部,以及网站的侧边栏。我认为,这会减缓网站负载,所以,问题是how to load these buttons and the associated statistics only once (在变量中),然后在多个位置显示它们?我知道W3 Total Cache和其他类似的插件,但是其他方式呢?可能需要一些PHP代码?