阻止wordpress PHP curl请求发生两次


Stop wordpress PHP curl requests from happening twice

我正试图通过我的网站上的Customer.io跟踪用户活动。我正在发送带有用户信息、页面浏览量和触发事件(购买)的curl请求。出于某种原因,curl请求被发送了两次。

我的footer.php文件中有以下代码。(购买curl-req没有显示为它在不同的文件中)。

<?php
$current_user = wp_get_current_user();
if ($current_user instanceof WP_User) {
    $userId = $current_user->ID;
    $userEmail = $current_user->user_email;
    $userRegisterDate = strtotime($current_user->user_registered);
    $userFirstName = $current_user->user_firstname;
    if (($userId && $userEmail && $userRegisterDate && $userFirstName)) {
        $session = curl_init();
        $customer_id = $userId; 
        $customerio_url = 'https://track.customer.io/api/v1/customers/';
        $site_id = 'xxxxxxxx';
        $api_key = 'xxxxxxxx';
        $data = array('email' => $userEmail, 'first_name' => $userFirstName, 'created_at' => $userRegisterDate);
        curl_setopt($session, CURLOPT_URL, $customerio_url . $customer_id);
        curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($session, CURLOPT_HTTPGET, 1);
        curl_setopt($session, CURLOPT_HEADER, false);
        curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($session, CURLOPT_VERBOSE, 1);
        curl_setopt($session, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($session, CURLOPT_USERPWD, $site_id . ':' . $api_key);
        curl_exec($session);
        curl_close($session);
        $session = curl_init();
        $customerio_url = 'https://track.customer.io/api/v1/customers/' . $customer_id . '/events';
        $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        $data = array('name' => $actual_link, 'type' => 'page', 'data[referrer]' => 'http://www.spanishvirtually.com');
        curl_setopt($session, CURLOPT_URL, $customerio_url);
        curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($session, CURLOPT_HEADER, false);
        curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($session, CURLOPT_VERBOSE, 1);
        curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($session, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($session, CURLOPT_USERPWD, $site_id . ':' . $api_key);
        curl_exec($session);
        curl_close($session);
    }
}
?>

当我在customer.io中查看活动日志时,所有页面事件视图都是重复的。curl请求似乎被发送了两次。我假设footer.php页面正在加载/被调用两次。

我该如何防止这种情况发生?

我在一个自定义的wooccommerce模板文件中也有类似的代码(主题/woocommerce/checkout/theankyou.php,它也发送了两次curl请求)

这不是标准行为,但您可以通过将代码包装在语句中来阻止它,看看它是否已经运行。

if (!defined('TRACK_CUSTOMER')) {
    define('TRACK_CUSTOMER', 1);
    $current_user = wp_get_current_user();
    if ($current_user instanceof WP_User) {
        // ...
}