Skip to content

The Hits List FAQ

Does this send data to a third-party service?

No. The Hits List stores tracking data locally in your WordPress database and does not call a third-party analytics endpoint.

Use The Hits List – Popular Posts, the Popular Posts widget, [thl_list], or theme template tags. They share the main ranking, period, category/post, current-post exclusion, and publication-age options, but their presentation controls are not identical.

For one post's count, use The Hits List – Post Views, [thl_views], or [thl_views id="123"]. The block's Post ID defaults to 0 for the current post and offers Show when zero.

Does it include dashboard reporting?

Yes. The WordPress dashboard includes five cards: daily top posts, all-time top posts, views over time with a period-on-period comparison, trending posts, and refresh candidates.

Access defaults to users who can manage site options. Add other roles under Dashboard Access > Additional Dashboard Roles on the settings screen. These choices are site-specific and do not grant settings access. An installed developer capability override takes precedence over role choices.

It compares the last three completed days with the preceding fourteen completed days by default, excluding today. The calculation adjusts for those different durations and smooths small samples. A steady recorded daily rate scores 1.00; the score is not a literal growth multiplier or a percentage increase.

The default minimum is ten recent recorded views. Dashboard labels identify new articles, thin prior evidence, no recorded prior views, and unknown or incomplete coverage. Scores from limited history should be read with those labels.

What are refresh candidates?

Established, previously well-read posts whose recent recorded daily activity is low compared with their lifetime daily average. Recently published posts are excluded. Treat the list as a prompt for editorial review, not proof that a rewrite is needed.

If you can edit the article, Snooze 30 days hides it from this shortlist for 30 calendar days. Undo snooze restores eligibility sooner, and expiry restores it automatically. Snoozing does not suppress public rankings or stop tracking.

How do I track the results of an article refresh?

Save your content changes, then choose Mark refreshed in the dashboard or the article's Refresh follow-up panel. Ordinary saves do not create a refresh event. Marking it again replaces the previous follow-up reference.

The report compares seven full days before the refresh with seven full days after, in the recorded site timezone. The refresh day and today are excluded. While the after period accumulates, it shows completed days and counts so far, without a percentage. A full comparison also needs covered history and a nonzero prior total. It reports recorded views, not a claim that the edit caused a change.

Why is a comparison or percentage unavailable?

The editor offers completed 7- and 30-day reports; Views Over Time compares two completed 30-day periods. Exact dates, timezone, and daily coverage are shown.

Both periods need sufficiently covered, retained history for a numerical comparison. A known zero baseline cannot produce a percentage; a new article, unknown or interrupted collection, pruned data, timezone changes, imports, or a failed read can also prevent comparison. The report explains the condition and shows any known available date range.

Collection coverage is recorded prospectively. Old or imported rows do not prove uninterrupted tracking, and coverage does not guarantee that every browser view was captured. A displayed zero with unknown/incomplete coverage does not establish zero readership.

Can I hide a post, category, or tag from rankings?

Yes. Check Suppress this post from rankings in the editor controls and save, or select terms under Settings > The Hits List > Ranking Suppression. A post matching any selected category or tag is suppressed from public popular/trending lists and dashboard rankings, including Refresh Candidates.

Child Categories is off by default. Enable it to include all descendants of selected categories, including new descendants added later. Suppression preserves tracking, individual counts, article reports, and history; ordinary retention still applies. Suppressed articles also remain included in site-wide view totals.

Clear all matching rules to restore ranking eligibility. If a page cache already contains the rendered list, clear it too. Suppression changes ranking eligibility while leaving tracking enabled.

Can I stop a post from recommending itself or limit lists to recent articles?

Enable Exclude current post in the Popular Posts block/widget, or use [thl_list exclude_current_post="1"]. It applies to singular post/page views; archives and editor previews are unchanged.

Set Maximum post age (days) or use [thl_list max_age_days="30"]. 30 includes today and the preceding 29 calendar days in the site's timezone, 1 means today, and 0 leaves age unlimited. The supported range is 0–36500 days. Publication date decides age, not the last edit. This filter is separate from the view-count period and works with views or trending.

Can I export my view counts?

Yes. Export And Import View Counts > Export Counts downloads current-site overall and daily counts as CSV or JSON. It does not export hourly buckets, settings, or refresh markers. Use a full database/site backup if you need to preserve those too.

Can I restore an export or merge another site's counts?

Upload a compatible CSV or JSON under Import View Counts. Replace existing counts sets the entries in the file to their imported values and is safe to repeat; unrelated entries remain. Add to existing counts adds the file values each time, so repeating it adds them again.

Imports apply post IDs to the receiving site and ignore the file's blog IDs. Check those post IDs before importing from another site. Only overall and daily data is imported; daily imports do not establish continuous tracking coverage.

Can editors see view counts in wp-admin?

Yes. Under Content List Columns > Show View Columns For, select Posts, Pages, or registered public custom post types. Posts is the default. Use Screen Options on the chosen content list to show Total Views, Today's Views, or condensed Views. Total Views and Today's Views are sortable. The condensed Views column is display-only and shows lifetime/today counts together. Selecting no types hides the columns without changing tracking.

Anyone who can edit an article can also read its Article performance report when Show Editor Metabox is enabled. Limit Metabox to Admins restricts count/display controls while keeping reports and refresh actions available to article editors. Ordinary saves and report-period switches do not change counts.

Can I migrate from Top 10?

Yes. The plugin can import compatible overall and daily counts from Top 10 tables. Imports are rerun-safe, so repeating the import does not double-count unchanged source data.

How long is daily data kept?

Daily buckets are retained for 180 days by default. Change Daily Data Retention in settings. Hourly buckets default to 48 hours and are collected with the daily tracker; developers can adjust their retention using thehili_store_hourly_hours.

Scheduled retention does not age out lifetime totals. Permanent deletion, orphan cleanup, explicit count maintenance, edits, or imports can still remove or replace them. Increasing retention does not recover rows already pruned.

An hour-only custom period within hourly retention uses hour buckets, including the current partial hour. It is more precise than daily data, but is not a minute-by-minute rolling window.

When the request exceeds hourly retention, or includes a longer daily range as well, the list falls back to whole daily buckets. That can include more time than the requested hour range. Turn on Custom period?, leave Daily range empty, and set Hour range for an hour-only list; the shortcode equivalent is [thl_list daily="1" hour_range="6"].

What happens to counts when I delete content?

Permanently deleting a post removes its lifetime, daily, and hourly counts. Trash preserves them by default, so restoring the post retains its history. A developer can opt into trash purging with thehili_purge_counts_on_trash.

Permanent multisite site removal clears that site's shared count partition. Archival and soft deletion preserve it, and other sites' counts remain untouched.

Does upgrading clean up older deleted-post counts?

Yes. Version 1.6.0 schedules a one-time background sweep of historical orphan rows in all three count tables. It preserves every existing post, including drafts, private posts, attachments, and Trash, and processes bounded batches rather than one large request.

The settings screen shows progress, removed rows per table, errors, and completion. On multisite, the sweep covers shared count partitions across sites and the report is visible to network administrators. WordPress cron must run for automatic progress. Errors are retried; if a failed progress save makes removal totals incomplete, the completed report keeps a qualifier that they cover saved batches only.

On a single-site installation, rows labelled with a different site ID are
preserved and reported as skipped because their content cannot be checked
against that site's posts.

Can I clear counts without deleting the article?

Yes. WP-CLI accepts one or more positive whole-number post IDs:

wp the-hits-list delete-post-counts 123 456 --dry-run
wp the-hits-list delete-post-counts 123 456

The first command previews rows without changing data. The second removes lifetime, daily, and hourly count rows while leaving the articles intact. Duplicate IDs are processed once, and missing articles are valid targets for known orphan IDs. Every argument is validated before deletion.

On multisite, the default is the current WP-CLI site; --blog-id=2 selects another existing site. A single-site installation rejects a foreign site ID. The command reports each table's rows and warns about IDs with no counts. Partial failures exit nonzero and report confirmed progress; rerun to remove remaining rows. Deletes are not transactional.

Is tracking automatically reliable behind a full-page cache?

No. Tracking uses a nonce generated when the page is rendered. A cached page can keep serving that nonce after expiry, leading to 403 tracking failures. Version 1.6.0 does not automatically refresh the nonce or retry a REST failure through AJAX.

Test tracking on cached pages, then coordinate cache expiry or exclusions with your hosting/cache provider. You can select AJAX under Tracker Type if REST is blocked, but changing transport does not remove the nonce-expiry limitation. Dynamic Post Count refreshes displayed counts, not the tracking nonce.

Will it slow my site down?

Popular-post output is cached and its database queries are batched, so a list costs roughly the same amount of work whether it shows three posts or thirty. Sites running a persistent object cache benefit further, because the results carry between page loads.

Is this a full analytics suite?

No. The Hits List is focused on local view counts and popular-content display. Use a full analytics platform if you need campaign attribution, visitor funnels, or cross-site reporting.