booking_id = $booking->id; $tracking->restaurant_id = $booking->restaurant_id; // Capture UTM parameters $tracking->utm_source = $this->getTrackingParam('utm_source'); $tracking->utm_medium = $this->getTrackingParam('utm_medium'); $tracking->utm_campaign = $this->getTrackingParam('utm_campaign'); $tracking->utm_term = $this->getTrackingParam('utm_term'); $tracking->utm_content = $this->getTrackingParam('utm_content'); $tracking->utm_id = $this->getTrackingParam('utm_id'); // Capture primary Click IDs $tracking->gclid = $this->getTrackingParam('gclid'); $tracking->fbclid = $this->getTrackingParam('fbclid'); $tracking->msclkid = $this->getTrackingParam('msclkid'); $tracking->ttclid = $this->getTrackingParam('ttclid'); // Capture referrer and landing page $tracking->referrer_url = $this->getTrackingParam('referrer_url'); $tracking->landing_page = $this->getTrackingParam('landing_page'); // Capture user agent from request (or use server variable) $tracking->user_agent = $this->getTrackingParam('user_agent'); if (!$tracking->user_agent && isset($_SERVER['HTTP_USER_AGENT'])) { $tracking->user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']); } // Capture IP address $tracking->ip_address = $this->getClientIp(); // Build raw query string from tracking params $raw_query_parts = []; foreach ($_REQUEST as $key => $value) { if (strpos($key, 'tracking_') === 0) { $original_key = str_replace('tracking_', '', $key); $raw_query_parts[] = $original_key . '=' . urlencode($value); } } $tracking->raw_query = implode('&', $raw_query_parts); // Capture secondary Click IDs and store in settings $secondary_click_ids = []; $secondary_keys = [ 'twclid', 'li_fat_id', 'dclid', 'sccid', 'gbraid', 'wbraid', 'irclickid', 'ScCid', 'yclid', 'epik' ]; foreach ($secondary_keys as $key) { $value = $this->getTrackingParam($key); if ($value) { $secondary_click_ids[$key] = $value; } } if (!empty($secondary_click_ids)) { $tracking->set_setting('additional_click_ids', $secondary_click_ids); } // Capture any other tracking parameters $additional_params = []; foreach ($_REQUEST as $key => $value) { if (strpos($key, 'tracking_') === 0) { $original_key = str_replace('tracking_', '', $key); // Skip if already captured if (!in_array($original_key, [ 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_id', 'gclid', 'fbclid', 'msclkid', 'ttclid', 'referrer_url', 'landing_page', 'user_agent' ]) && !in_array($original_key, $secondary_keys)) { $additional_params[$original_key] = sanitize_text_field($value); } } } if (!empty($additional_params)) { $tracking->set_setting('additional_params', $additional_params); } // Save tracking $tracking->save(); } catch (\Exception $e) { // Log error but don't fail the booking error_log('Alex Reservations - Error saving booking tracking: ' . $e->getMessage()); } } /** * Get tracking parameter from request * * @param string $param * @return string|null */ protected function getTrackingParam($param) { $key = 'tracking_' . $param; if (isset($_REQUEST[$key])) { return sanitize_text_field($_REQUEST[$key]); } return null; } /** * Get client IP address * * @return string */ protected function getClientIp() { $ip = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } return sanitize_text_field($ip); } }