DOCUMENTATION

Revolutionary Popups Documentation

Build exit-intent offers, slide-ins and notification bars that convert, with real trigger logic, audience targeting, frequency caps, A/B testing and a full developer API, all self-hosted inside WordPress.

Getting started

Install the plugin and build your first exit-intent campaign.

Campaign types

Center modals, slide-ins, bars, fullscreen takeovers and inline embeds.

Triggers

Fire on exit intent, scroll depth, time on page, click or inactivity.

Targeting & caps

Decide who sees a campaign and how often with rules and frequency caps.

Convert & measure

Capture leads, split test variants and track conversions in your own database.

Developers

Place via shortcode or block and extend display with hooks and filters.

Introduction

Revolutionary Popups is a self-hosted campaign engine for WordPress. Every popup, slide-in and notification bar is a campaign: a design, a trigger that decides when it appears, targeting rules that decide who sees it, and frequency caps that decide how often. Conversions are tracked per campaign, and you can split test two variants against each other to find what actually works.

Because nothing is hosted on a third-party service, your script loads fast, your visitor data stays in your database, and you're never billed by the impression. You design campaigns in the editor, place them with the [revolutionary_popup] shortcode or the Gutenberg block, and watch the results in the analytics dashboard.

Tip: A campaign can target the whole site by default, so you don't have to embed anything. The shortcode and block are only for inline campaigns you want pinned to a specific spot in the content.

Installation

Revolutionary Popups installs like any standard WordPress plugin. Use the bundled .zip archive or install it straight from the Revolutionary Plugins hub.

  1. Upload the plugin. In your WordPress admin, go to Plugins -> Add New -> Upload Plugin and choose revolutionary-popups.zip. Click Install Now.
  2. Activate. Once installed, click Activate. A new Popups menu appears in the admin sidebar.
  3. Run the setup wizard. On first activation the wizard creates the campaign and analytics tables and lets you set a global frequency default so nothing fires too aggressively out of the gate.
  4. Verify your license. Paste your license key under Popups -> Settings -> License to unlock exit-intent, A/B testing and premium templates.

Heads up: If you run aggressive page caching, exclude the impression endpoint /wp-json/revpopup/v1/track from cache so views and conversions record accurately. Campaign display itself is cache-safe.

Your first popup

Let's build an exit-intent email capture and put it live across the blog. Start to finish, it takes about three minutes.

  1. Create a campaign. Go to Popups -> Add New. Pick the Center modal type and start from the Discount capture template, or a blank canvas.
  2. Design it. Edit the headline, body and button inline. Add an email field, or insert a full form.
  3. Pick a trigger. Open the Trigger tab and choose Exit intent. Add a small delay or a scroll threshold if you want it to feel less abrupt.
  4. Set targeting. Under Targeting, limit it to the blog: Post type is Post. Add Visitor is not subscribed so converters never see it again.
  5. Cap and publish. Set a frequency cap of once per day, click Publish, and the campaign is live everywhere it matches.

That's the whole loop: design, trigger, target, cap. Every other feature in this guide layers onto those same four tabs.

Campaign types

Each campaign has a type that sets how it appears on screen. Types marked Pro require an active license. You can switch type at any time without losing your content.

Type Description Best for
Center modal A centered card over a dimmed page overlay. The classic, high-attention popup. Discounts, lead magnets, important offers
Slide-in A small panel that slides in from a screen corner without dimming the page. Soft nudges, related content, newsletter
Notification bar A sticky bar pinned to the top or bottom of the viewport, optionally with a countdown. Sales, shipping cut-offs, announcements
Fullscreen (Pro) A full-viewport takeover for maximum impact on a single, focused call to action. Launches, gated welcome offers
Inline / embedded Renders in the content flow via shortcode or block, no overlay. In-article opt-ins, content upgrades

Every type shares the same design editor, trigger options and targeting rules, so a lesson you learn on one applies to all of them.

Triggers

A trigger decides the exact moment a campaign appears. Pick one, or combine a couple, so the offer lands when intent is highest instead of the second someone arrives.

  • Exit intent: fires when the cursor moves toward the browser chrome on desktop. On mobile it falls back to back-button and inactivity detection.
  • Scroll depth: fires after the visitor scrolls past a percentage of the page, great for content upgrades.
  • Time on page: fires after a set number of seconds, so only engaged readers see it.
  • On load: fires immediately, with an optional delay. Use sparingly and always with a frequency cap.
  • On click: opens when a visitor clicks an element with a chosen CSS class or the data-revpopup attribute.
  • Inactivity: fires after a stretch of no scrolling, clicking or typing.

When you combine triggers, the campaign waits until the first one fires. An exit-intent campaign with a 60% scroll guard only shows to people who both read a good chunk of the page and then moved to leave.

Targeting rules

Targeting decides who sees a campaign. Each rule is a simple condition / operator / value triplet, combined with any (OR) or all (AND) logic. A campaign only displays when its rules pass.

Condition Matches on Example
Page / URL Specific pages, post types, categories or URL patterns. URL contains /pricing
Visitor New vs returning, logged in, role, already-subscribed cookie. Visitor is Returning
Device Desktop, tablet or mobile. Device is not Mobile
Source Referrer domain and UTM campaign, source or medium. utm_source is newsletter
Schedule Start/end dates and days of week. Between Black Friday dates
Cookie / query Presence or value of a cookie or query string. Cookie vip exists

Tip: Add a Visitor is not subscribed rule to every lead-capture campaign. Combined with the auto-hide on convert, it guarantees your existing subscribers never see the same opt-in twice.

Frequency & caps

Frequency controls keep campaigns polite. Even a perfectly targeted popup wears out its welcome if it shows on every page load, so each campaign has its own caps and cooldowns.

  • Show cap: the most times a visitor can see this campaign, per session, per day, or ever.
  • Cooldown: a minimum gap between views, so it never reappears the moment it's closed.
  • Hide on convert: once a visitor takes the action, the campaign stops showing for them automatically.
  • Hide on close: respect a manual close for a set number of days before trying again.

Caps are stored in a first-party cookie, with a logged-in user-meta fallback so they hold across devices for signed-in visitors. A global default under Settings applies to every campaign that doesn't set its own.

Forms inside popups

Most campaigns exist to capture something. You can add a built-in email field for a quick opt-in, or embed a full form for richer data. Submissions are stored and can be forwarded anywhere.

  • Quick email capture: a single email field with a button, wired to your list provider or a webhook.
  • Embedded forms: drop a Revolutionary Forms form into any campaign for multi-field capture, validation and conditional logic.
  • Success states: swap the popup to a thank-you message, redirect, or reveal a coupon code on submit.

Pairs well with Revolutionary Forms: when both plugins are active, you can pick any existing form from a dropdown inside the popup editor, no rebuilding fields, and entries land in the shared Forms dashboard.

A/B testing

Split testing lets you run two variants of a campaign against live traffic and let conversions pick the winner. Duplicate a campaign into Variant A and Variant B, change one thing, the headline, the offer, the design or the trigger, and publish the test.

Traffic is split evenly and tracked separately. The dashboard reports views, conversions and conversion rate for each variant, and once a result is statistically meaningful, the winner is flagged so you can promote it with one click.

Test one thing at a time: change a single variable per test. If you swap the headline and the design at once, a win tells you the campaign improved but not which change earned it.

Analytics

Every campaign records impressions, conversions and conversion rate, stored in your own database, so you can prove what each popup is worth without a third-party analytics account.

  • Per-campaign stats: views, conversions, conversion rate and trend over time.
  • Goal tracking: count a click, a form submit or a coupon reveal as the conversion.
  • Revenue attribution: when paired with an ecommerce store, tie orders back to the campaign that triggered them.
  • Export: download any view to CSV for deeper analysis.

Tracking is first-party and respects Do Not Track and consent settings, so analytics stay accurate without compromising your privacy posture.

Shortcode & block

Most campaigns display automatically based on their targeting, but inline campaigns can be placed exactly where you want with the shortcode. The only required attribute is the campaign id, shown in the campaign list and editor URL.

// Render inline campaign #3 in the content flow
[revolutionary_popup id="3"]

// Use a button to open a modal campaign on click
<button data-revpopup="3">Get my coupon</button>

In the block editor, search for "Revolutionary Popup", insert the block, and choose a campaign from the dropdown. You can also open a campaign from your own JavaScript with window.RevPopup.open( 3 ), handy for triggering a popup after a custom event such as adding to cart.

Hooks & filters

Developers can extend the display and conversion lifecycle with WordPress actions and filters. Use the revpopup_should_display filter to add your own targeting logic, here we suppress every campaign for users who hold a paid membership:

add_filter( 'revpopup_should_display', function( $show, $campaign, $visitor ) {
    if ( is_user_logged_in() && my_is_paid_member( get_current_user_id() ) ) {
        return false;
    }
    return $show;
}, 10, 3 );

Use the revpopup_converted action to react when a visitor converts, log it, sync to a CRM, or fire your own analytics event. Other commonly used hooks include revpopup_render_content (filter the campaign HTML), revpopup_targeting_rules (register a custom condition), revpopup_before_display, and revpopup_frequency_cap.

Troubleshooting

Most issues come down to caching, targeting or frequency. Work through these first:

  • Popup never appears: check the targeting rules actually match the page and visitor, and that the campaign is published, not a draft. Open in a private window to dodge your own frequency cap.
  • Exit-intent doesn't fire on mobile: that's expected, phones have no cursor. Confirm the mobile fallback (back button or inactivity) is enabled on the campaign.
  • Views or conversions read zero: your cache is serving the tracking endpoint. Exclude /wp-json/revpopup/v1/track from page and object caching.
  • Popup shows too often: raise the cooldown and lower the show cap, and confirm Hide on convert is on so subscribers stop seeing it.
  • Styling looks off: a theme or another plugin may be overriding the overlay z-index. Bump the campaign's z-index under Settings -> Display.

Tip: Add ?revpopup_preview=ID to any URL to force a campaign to show, ignoring triggers and caps.

FAQ

Frequently asked questions

No. You can run unlimited campaigns and unlimited impressions on one license. Everything is self-hosted, so the only practical limit is your own server, and there is never a per-impression charge.

No. The script loads asynchronously and renders the campaign only when its trigger fires, so it stays out of the critical render path. There is no third-party request, which keeps Largest Contentful Paint and layout shift clean.

Yes. Campaign display is cache-safe out of the box. Just exclude the tracking endpoint from cache so impressions and conversions record accurately under full-page caching.

Yes. Tracking is first-party, you can disable IP storage, frequency cookies are essential and minimal, and the plugin respects Do Not Track and your consent banner. Captured leads live in your own database.

No. The free version covers center modals, slide-ins, bars, time and scroll triggers, basic targeting and email capture. Pro adds exit-intent, full targeting and frequency caps, A/B testing, analytics and fullscreen takeovers.

Was this helpful?

Browse the rest of the documentation or see what is included in each plan.

Back to all docs