<?php defined('ABSPATH') || exit; class WC_Settings_Tracking { protected $allowed_options = array(); protected $updated_options = array(); public function init() { add_action('woocommerce_settings_page_init', array($this, 'track_settings_page_view')); add_action('woocommerce_update_option', array($this, 'add_option_to_list')); add_action('woocommerce_update_options', array($this, 'send_settings_change_event')); } public function add_option_to_list($option) { $this->allowed_options[] = $option['id']; if (false === has_action('update_option', array($this, 'track_setting_change'))) { add_action('update_option', array($this, 'track_setting_change'), 10, 3); } } public function track_setting_change($option_name, $old_value, $new_value) { if (!in_array($option_name, $this->allowed_options, true)) { return; } if (is_scalar($old_value) && is_scalar($new_value) && (string) $old_value === (string) $new_value) { return; } $this->updated_options[] = $option_name; } public function send_settings_change_event() { global $current_tab; if (empty($this->updated_options)) { return; } $properties = array('settings' => implode(',', $this->updated_options)); if (isset($current_tab)) { $properties['tab'] = $current_tab; } WC_Tracks::record_event('settings_change', $properties); } public function track_settings_page_view() { global $current_tab, $current_section; $properties = array('tab' => $current_tab, 'section' => empty($current_section) ? null : $current_section); WC_Tracks::record_event('settings_view', $properties); } }