Quick Start
Get PulseViews tracking views in under 2 minutes.
Go to Plugins → Add New, search "PulseViews", click Install then Activate. Or upload the ZIP via Plugins → Add New → Upload Plugin.
A PulseViews menu appears in your WP admin sidebar. Click Dashboard — stats appear as soon as the first views come in.
Go to Settings → Display → Auto-insert position and choose "After content" to show the badge on all posts automatically. Or place [pulseviews] in any post.
If you use a caching plugin, go to Settings → Counting → Tracking mode and switch to JavaScript.
Requirements
- WordPress 6.4 or higher
- PHP 8.1 or higher
- MySQL 5.7+ or MariaDB 10.3+
Installation
From WordPress.org
- Go to Plugins → Add New Plugin
- Search for PulseViews
- Click Install Now, then Activate
PulseViews creates four database tables on activation: pv_views, pv_aggregates, pv_post_totals, pv_exclusions. These are lightweight indexed tables — zero wp_postmeta writes.
Tracking Settings
Go to PulseViews → Settings → Counting.
- Tracking mode — PHP (server-side, most accurate), JavaScript (async, cache-compatible), or Both (PHP first, JS fallback)
- Track post types — which post types get view counts. Includes all custom post types.
- Session interval — minimum time before the same visitor is counted again. Default: 30 min.
- Count bot traffic — bot views are always stored but excluded from counts by default.
- Trust proxy headers — enable if behind Cloudflare, Nginx proxy, or a load balancer.
Display Settings
Go to PulseViews → Settings → Display.
- View count label — the word after the number. Default "views". Change to "readers", "hits", etc.
- Display style — Pill, Block, Inline, or Compact.
- Colour variant — Outline (theme colour), Filled (solid background), or Accent (
--pv-accentCSS variable). - Auto-insert position — Disabled, Before content, or After content.
Exclusions
- Exclude logged-in users — skip views from any authenticated WordPress user.
- Exclude roles — exclude specific roles even when "exclude logged-in" is off.
Geographic Tracking
Geographic tracking is disabled by default. Enable in Settings → Other → Geographic tracking.
⚠ When enabled, visitor IPs may be sent to ip-api.com. Results cached 24 hours per IP. With Cloudflare, the country comes from the CF-IPCountry header — no external call is made.
Display Styles
- Pill (
style="1") — rounded pill with eye icon. Three colour variants. - Block (
style="2") — bold inverted counter. Great above titles or in sidebars. - Inline (
style="3") — pure text, inherits your theme's font exactly. - Compact (
style="4") — small bordered badge for post card grids.
Shortcode Reference
Use [pulseviews] anywhere in post content, page content, or widget text.
[pulseviews]
[pulseviews style="1" variant="filled"]
[pulseviews style="2"]
[pulseviews label="readers" period="week"]
[pulseviews id="42" style="3"]
Auto-Insert
Set Settings → Display → Auto-insert position to "Before content" or "After content". The badge only appears on singular posts of the selected display post types, on the main query only — never in loops or widgets.
Installing PulseViews Pro
Buy from pulseviews.net/checkout. Download email arrives within seconds.
PulseViews Pro won't activate without it. Install and activate PulseViews (free) first.
Go to Plugins → Add New → Upload Plugin, choose the ZIP, Install Now, then Activate.
A Reports submenu appears under PulseViews immediately.
Pro: Reports
Access via PulseViews → Reports. Set a date range, choose grouping (Day / Week / Month), optionally filter by post type, and click Apply. The page shows four summary cards, an interactive chart, Top Content, Traffic Sources, Most Viral, and Geographic breakdown.
Pro: Export
Use the CSV and XML buttons top-right on the Reports page. The export applies your current date range and post type filter. CSV includes a UTF-8 BOM so it opens correctly in Microsoft Excel.
Hooks & Filters
// Check if Pro is active
$is_pro = apply_filters( 'pulseviews/is_pro', false );
// Fires after the free plugin boots
add_action( 'pulseviews/booted', function( $plugin ) {
// register custom modules
} );
// Filter the formatted view count before display
add_filter( 'pulseviews/format_count', function( $formatted, $raw ) {
return $formatted;
}, 10, 2 );
Database Tables
pv_views— raw view events. post_id, ip_hash, session_key, user_agent, is_bot, country_code, referrer, viewed_at.pv_aggregates— nightly daily rollups by post. Used for fast chart queries.pv_post_totals— running totals per post. Updated on every view via UPSERT.pv_exclusions— IPs or session keys permanently excluded from tracking.
Troubleshooting
Chart shows no data
The chart falls back to raw pv_views if aggregates haven't been populated yet (WP-Cron runs nightly). Check that WP-Cron is running — install WP Crontrol and look for the pulseviews/aggregate event.
Views not being counted
Check: (1) Is the post type selected in Settings → Counting? (2) Are you logged in as an excluded role? (3) Are you behind a caching plugin without JS mode enabled?
Pro says "requires PulseViews"
Install and activate the free PulseViews plugin first, then activate Pro.