This release focuses on two key areas: fixing statistics inconsistencies across Simple History and improving performance throughout the plugin.
Statistics Fixes
If you’ve noticed different numbers when viewing activity stats in the sidebar versus the Insights page or email reports, that’s now fixed.
Consistent Time Zones Everywhere
Different parts of Simple History used different timezone calculations, which caused statistics to show different numbers for the same time period. All statistics now respect your WordPress timezone setting (Settings > General)—whether you’re viewing the sidebar widget, the detailed Insights page, email reports, or using filters. Your activity stats now align with your site’s local time.
Accurate Date Ranges
We corrected several date calculation issues where “Last 30 days” could accidentally include 31 days, or today’s events would show as zero. When you select “Last 7 days” or “Last 30 days,” you get exactly that period.
Aligned Email Previews
Email report previews now show the same 7-day period as your sidebar stats, making it easier to verify the numbers.
Consistent Filtering
All date filter options in the main log (Today, Last 7 days, custom date ranges, and month selections) now use your WordPress timezone consistently, so filter results match your sidebar statistics.
Performance Improvements
This release includes several optimizations that reduce overhead and improve site speed:
Reduced Filter Calls
Logger messages are now only loaded when needed, eliminating approximately 980 gettext filter calls on every page load. This reduces overhead to zero on pages that don’t use Simple History.
Optimized Plugin Logger
The Plugin Logger now only runs gettext filters and auto-update detection on the plugins.php page instead of globally, reducing unnecessary processing throughout your admin area.
Better Resource Management
Context handling now uses batch inserts for events with many context items, and plugin action hooks are simplified to only target Simple History’s own plugin.
What This Means for You
- All statistics displays now show consistent, accurate counts
- “Last 30 days” means the same thing everywhere in the plugin
- You can compare numbers across different views with confidence
- Email reports show accurate activity data
- Faster page loads with reduced overhead
Technical Details
For those interested in the details, this update includes a new centralized Date_Helper
class for timezone-aware date operations, comprehensive test coverage with 11 test cases, optimized caching with 5-minute refresh intervals, and improved permission-based filtering.
Consistent Filtering
All date filter options in the main log (Today, Last 7 days, custom date ranges, and month selections) now use your WordPress timezone consistently, so filter results match your sidebar statistics.
Performance Improvements
This release includes several performance optimizations that reduce overhead and improve site speed:
Reduced Filter Calls
Logger messages are now only loaded when needed, eliminating approximately 980 gettext filter calls on every page load. This reduces overhead to zero on pages that don’t use Simple History.
Optimized Plugin Logger
The Plugin Logger now only runs gettext filters and auto-update detection on the plugins.php page instead of globally, reducing unnecessary processing throughout your admin area.
Better Resource Management
Deprecated classes are now autoloaded only when needed, context handling uses batch inserts for events with many context items, and plugin action hooks are simplified to only target Simple History’s own plugin.
What This Means for You
- All statistics displays now show consistent, accurate counts
- “Last 30 days” means the same thing everywhere in the plugin
- You can compare numbers across different views with confidence
- Email reports show accurate activity data
Technical Improvements
For those interested in the details, this update includes a new centralized Date_Helper
class for timezone-aware date operations, comprehensive test coverage with 11 test cases, optimized caching with 5-minute refresh intervals, and improved permission-based filtering.
Changelog
Added
- Add icon to sticky events label.
- Add help text to sidebar stats box about refresh interval and what data is used for the statistics (for admin the stats are based on all events, for other users is based on the events they have permission to view).
- Email reports: Add tooltips to email “Activity by day” showing full date (e.g., “Thursday 2 October 2025”) on hover for each day.
- Email reports: Each day is now a link to the full log for that day.
Fixed
- Sidebar stats was not always using the correct cached data.
- Fix timezone and date handling across all stats features (sidebar, Insights page, REST API, charts) and all filter dropdowns (Today, Last N days, custom date ranges, month filters) to use WordPress timezone instead of server/UTC timezone.
- “Today” now correctly shows events from 00:00 until current time (previously showed events from now minus 24 hours).
- Email reports: Fix timezone and date handling issues (now consistently use WordPress timezone), improved daily stats accuracy, date range, and updated email copy.
- Occasions count in main GUI was displaying incorrect number (always one event to many!) – button now shows the actual number of similar events that will be loaded when expanded.
Changed
- Email preview now shows last 7 days including today (matching sidebar “7 days” stat) so users can verify preview numbers against sidebar.
- Email sent on Mondays now shows previous complete Monday-Sunday week (excludes current Monday).
- Email “Activity by day” now displays days in chronological order matching the date range instead of fixed calendar week order.
- Use “Today” instead of “Last day” in main GUI filters to make it more clear what range is being shown.
Performance
- Improved performance by loading logger messages only when needed, eliminating ~980 gettext filter calls on every page load. This reduces overhead to zero on pages that don’t use Simple History.
- Optimized context handling when logging events with many context items using batch inserts.
- Plugin Logger now only runs gettext filters and auto-update detection on the plugins.php page instead of globally.
- Simplified plugin action list hooks by only hooking into our plugin.
- Added autoloading of deprecated classes, so they are only loaded if needed.
Removed
- Removed legacy AJAX API endpoint (
action=simple_history_api
). The plugin now uses the WordPress REST API exclusively.