'impressions', 'click' => 'clicks', 'dismiss' => 'dismissals', ); $today = gmdate( 'Y-m-d' ); $data = get_option( 'adasprso_analytics_data', array() ); if ( ! isset( $data[ $today ] ) ) { $data[ $today ] = array( 'impressions' => 0, 'clicks' => 0, 'dismissals' => 0 ); } $data[ $today ][ $field_map[ $event ] ]++; // Keep only the most recent 60 days to prevent unbounded growth. krsort( $data ); $data = array_slice( $data, 0, 60, true ); update_option( 'adasprso_analytics_data', $data, false ); wp_send_json_success(); } /** * Return per-day stats for the given number of days (newest last). * * @param int $days Number of days to return (default 30). * @return array Associative array keyed YYYY-MM-DD => ['impressions','clicks','dismissals']. */ public static function get_stats( $days = 30 ) { $data = get_option( 'adasprso_analytics_data', array() ); $result = array(); for ( $i = $days - 1; $i >= 0; $i-- ) { $date = gmdate( 'Y-m-d', strtotime( "-{$i} days" ) ); $result[ $date ] = isset( $data[ $date ] ) ? $data[ $date ] : array( 'impressions' => 0, 'clicks' => 0, 'dismissals' => 0 ); } return $result; } }