Turf Stats

Changelog

1.21.1

  • Fixed the “Formulieren” (Forms), “Top search terms” and “Most discussed”
    boxes on the Analysis/Statistics pages silently disappearing for any
    period other than “All time” – a broken date filter made the underlying
    query invalid SQL, so it failed silently and the box was dropped.

1.21.0

  • New [turf_stats] shortcode: an at-a-glance table (online now, today,
    yesterday, last 7 days, last 28 days) for a sidebar Text/HTML widget or
    Shortcode block, with metric (views/visitors), layout (table/list)
    and items attributes to customize which rows show.
  • Fixed a corrupted Dutch (nl_NL) .mo file (duplicate “Online now” source
    string made it fail to compile, and the compiled file itself wasn’t a
    valid sorted .mo) – Dutch translations were silently not loading.

1.20.3

  • Screen resolution breakdown labels are now English source strings with
    Dutch translations in the language file (was accidentally Dutch in code).
  • Daily chart window math extracted into a shared turf_day_window() helper
    so the single-day and 7-day windows no longer duplicate the timezone logic.
  • Fixed TURF_VERSION (the cache-busting version for all enqueued JS/CSS)
    being stuck at 1.19.0 since the 1.20.0 release – every asset change since
    then was shipped under an unchanged version string.

1.20.2

  • Fixed daily bar chart on the Today/Yesterday/fixed-date tabs: it showed
    only the anchor day (plus a sliver of the day before under a non-UTC site
    timezone) instead of the intended 7-day context window. The chart query
    now spans the 7 days ending on the selected day, matching the 7 bars it
    renders. Regression from 1.20.0 (date navigation).

1.20.1

  • Screen resolution: fall back to viewport innerWidth/innerHeight in the
    tracking JS when window.screen reports 0 or is missing (in-app webviews,
    fingerprinting-protected browsers) so fewer views land in “unknown”.
  • Screen resolution breakdown now separates App/REST API views (which never
    run the tracking JS and legitimately have no screen size) from real browser
    views that failed to report one, instead of lumping both into a single
    “unknown” bucket.

1.20.0

  • Added date navigation (native date picker, Yesterday tab) with fixed-date sentinel fix.
  • Added top-referrers ‘Toon meer’ toggle (shows 10, reveals up to 50).
  • Added dashboard widget (online now, today’s views/visitors with % vs yesterday), reusing overview card styling.
  • Added review-nudge snooze (random 30-90 days, max 3x then permanent).
  • Added device-class label (Phone/Tablet/Desktop) at screen resolution.
  • Fixed 90-day chart overflow (gap + horizontal scroll).
  • Dutch translations for new strings.

1.19.0

  • New “Screen resolution” breakdown box: visitor screen sizes (in CSS
    pixels) are recorded with each view. The new database columns are added
    automatically on update.
  • New “Avg. load time” stat box: page load times are measured in the
    visitor’s browser via the Navigation Timing API and averaged per period.
  • The “Online now” box gains a live “Currently viewed” list of the pages
    current visitors are on, refreshed on the same 20-second poll.
  • Hourly visitors chart reworked: a fixed 24-hour axis with a dashed
    “yesterday” line for direct comparison against the previous day.
  • Daily views/visitors bars now show their values on the chart, with
    density-based label sizing on the 30- and 90-day views.
  • The Caching box now explains itself when a cache layer is detected but
    is serving (almost) none of the tracked page views.
  • Much faster legacy view-count import: a Jetpack top-posts pre-pass
    covers the most-viewed posts in one request, admin-page batches run
    concurrently, and the WP-CLI command gains –offset/–limit flags.
  • Dutch (nl_NL) translation updated for all new strings.

1.18.1

  • Added wordpress.org listing screenshots (Statistics overview, Analysis,
    Bots & LLMs) and the corresponding == Screenshots == section. No
    functional or tracking changes.

1.18.0

  • The GitHub-based update checker is removed entirely (updater.php and its
    vendored library) – releases now deploy straight to WordPress.org via a
    GitHub Action, and updates are handled by wordpress.org like any other
    hosted plugin.
  • Fixed postbox drag-order and collapse/expand state not actually being
    saved: the admin pages were missing the nonce fields WordPress core’s own
    postbox AJAX handlers look for, so those requests silently failed. Order
    and collapsed state now persist correctly per user.
  • The site-specific “Dorpsapp” companion-app integration is now a generic,
    opt-in connector-app mechanism (turf_connector_app_route_patterns /
    turf_connector_app_label filters) – no behavior change unless you were
    using the old turf_dorpsapp_route_patterns filter, which is renamed.
  • Added a GitHub issues link (bug reports / feature suggestions) to the FAQ.
  • The legacy view-count import (Jetpack Stats / the old entry-views plugin) is
    now also available as a “Statistics > Import” admin page, alongside the
    existing wp turf-stats import-legacy-views WP-CLI command – same import,
    run in small AJAX batches with a progress bar instead of the command line.

1.17.2

  • Fixed a WordPress.org submission error: the Plugin URI and Author URI
    headers pointed at the same URL. Author URI now points at the author’s
    GitHub profile instead of the plugin repo.

1.17.1

  • Cleared the remaining WordPress.org Plugin Check warnings: dropped the
    now-redundant load_plugin_textdomain() call (translations for wp.org-hosted
    plugins load automatically since WP 4.6) and annotated the opt-in REST debug
    logger. No functional or tracking changes.

1.17.0

  • WordPress.org compliance release: readme.txt, uninstall.php with opt-in data
    removal, direct-access guards on all files, and the GitHub update checker is
    no longer part of the WordPress.org build (updates come from wordpress.org).

1.16.1

  • Long lists are now collapsed before first paint (CSS), eliminating the
    load-time jump introduced in 1.16.0.

1.16.0

  • Cache offload insight (served-from-cache % with layer detection).
  • Landing pages report with per-landing bounce rate.
  • Blocks with no data for the selected period are hidden entirely.
  • All lists use one in-place Show more / Show less toggle; server-side
    pagination removed.

1.15.0

  • Bilingual: English source strings with a bundled Dutch (nl_NL) translation.

1.14.0

  • Raw (non-deduplicated) view counting, views per visitor, average visit
    duration, an hourly visitors chart for “Today”, and full-URL outbound link
    tracking including the source page.

Earlier

  • See https://github.com/fbloemhof/turf-stats/releases for the full history.

Plugin Website
Visit website

Author
Freek
Version:
1.21.1
Last Updated
July 17, 2026
Active Installs
10
Requires
WordPress 6.0
Tested Up To
WordPress 7.0.1
Requires PHP
7.4

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.