Requirements
- WordPress 5.8 or newer
- PHP 7.4 or newer, with the OpenSSL extension (nearly every host has it on)
- A site that runs on HTTPS. Browsers don't allow push notifications on plain HTTP, on any site.
You don't need Composer, an outside service, or an API key. The plugin creates its own encryption keys when you activate it.
Install and activate
Get the free plugin from the download page. If you bought Premium, use the download link in your Freemius purchase email.
- In WordPress, go to Plugins, Add New Plugin, Upload Plugin.
- Choose the zip file you downloaded, click Install Now, then Activate.
- If you bought Premium, enter your license key when the activation screen asks for it.
- Open Push Notifications in the left-hand admin menu.
Free and Premium are separate downloads. When you activate Premium, the Free version is switched off automatically, so you never run both.
Ask visitors to subscribe
Under Subscription prompt, pick a Prompt style:
| Style | What visitors see |
|---|---|
| Automatic | A popup shows itself to first-time visitors. No button needed. |
| Button | Nothing appears until a visitor clicks a [wppn_subscribe_button] shortcode that you place on a page. |
| Floating bell | A small bell sits in the corner of every page. Clicking it opens the popup. |
| Automatic popup + Floating bell | The popup shows once, and the bell stays so anyone who dismissed it can opt in later. |
You can also set the bell size and position, the popup size and position (eight positions each), the delay before the popup appears (5 seconds by default), and whether to ask again visitors who chose Later, how long to wait, and how many times.
Every piece of text is editable: the popup headline and description, the Allow and Later buttons, the thank-you card, and the three status messages (while connecting, if permission wasn't granted, and on an unexpected error).
The bell changes color with the visitor's state: blue when not subscribed, green with a check when subscribed, and grey when notifications are blocked in their browser. When the bell opens the popup, the popup appears on the opposite side so it never covers the bell.
Test your setup
- Open your site in a normal browser window (not Incognito) on the exact address visitors use, with
https://. - Wait for the popup, or click the bell, and choose Allow.
- You should see the thank-you card, and the bell turns green. The subscriber count in the admin goes up by one.
- Send yourself a test notification (next section).
If the popup doesn't appear, or nothing arrives, go to Troubleshooting. Caching plugins are the usual cause.
Send a notification
On the Push Notifications page, fill in Title, Message, and Link URL (where a click should take the visitor), then send.
The same page shows subscriber growth, a history of your sends, and your subscriber list. Small lists send at once. Larger lists are sent in the background in batches, so your site stays fast.
On the Free plan, each notification reaches up to 200 subscribers. Premium removes that limit.
Notify on new posts
Tick Automatically notify subscribers when a new post is published under Subscription prompt. Each new post is then sent using its title and excerpt. Password-protected posts are skipped so nothing private goes out. Custom post types are off by default; a developer can turn them on with the filter below.
WooCommerce
When WooCommerce is active, a WooCommerce section appears. All four triggers are off until you switch them on, and each has an editable title and message.
| Trigger | Who receives it | Details |
|---|---|---|
| New order placed | All subscribers | Sent once when payment is confirmed (Processing or Completed). Never includes the buyer's name or any personal detail. |
| Back in stock | All subscribers | Sent when a product goes from out of stock to in stock. |
| Price drop | All subscribers | Sent when a price falls by at least your minimum (5% by default), so tiny price syncs stay quiet. |
| Abandoned cart | Only the shopper who left the cart | Sent after a wait you choose (60 minutes by default). Works for logged-out shoppers. Cart contents are read on your server from WooCommerce. |
Templates accept these placeholders: {product}, {total}, {old_price}, {new_price}, and {items}.
Sending speed
Under Advanced, Server Performance & Delivery Speed, leave Auto-detect (recommended) on. The plugin reads your server's memory and time limits every time it sends and picks a speed to match. If your server comes under strain mid-send, each batch shrinks and slows down on its own.
| Level | Per batch | Pause | At once, per push service |
|---|---|---|---|
| Shared | 50 | 5 s | 10 |
| Business / managed | 200 | 3 s | 25 |
| Cloud | 400 | 2 s | 40 |
| VPS | 600 | 1 s | 60 |
| Dedicated | 1,000 | 1 s | 100 |
Auto-detect chooses from Shared up to VPS. Dedicated is never picked automatically, because a large VPS looks identical to a dedicated server from inside PHP. Choose it yourself only if you know it's true.
Import and export subscribers
In the Subscribers section you can export your list as a CSV, or import one to move subscriptions from another push provider or another site. The columns are endpoint, p256dh, and auth, with user_agent and created_at optional.
Very large files are imported in passes. If your server's time limit stops one early, the plugin tells you. Upload the same file again and it carries on, without creating duplicates.
Custom and headless sites
To let a separate, non-WordPress site subscribe visitors to your WordPress site's push feed, open Custom site integration. It shows your REST address and your public VAPID key. Then add that site under Advanced, Allowed external domains, entered exactly as the browser sends it: https://example.com, with no trailing slash.
POST /wp-json/wppn/v1/subscribe
POST /wp-json/wppn/v1/unsubscribe
Uninstall
By default, deleting the plugin keeps your data, so an accidental deactivate never loses subscribers. To remove everything (subscribers, send history, encryption keys, and settings), tick the delete-on-uninstall option under Advanced before you delete the plugin. Under Advanced you'll also find buttons to delete send history older than 90 days, and to delete all subscribers. Both act immediately and can't be undone.
For developers
Send a notification from your own code
do_action( 'wppn_send_notification', 'Title', 'Message', 'https://example.com/page' );
Filters
| Filter | What it changes |
|---|---|
wppn_modal_title, wppn_modal_body, wppn_modal_allow_label, wppn_modal_later_label | The popup text |
wppn_autosend_post_types | Post types that send automatically on publish. Default is array( 'post' ). |
wppn_max_subscribers_per_send | The safety ceiling on how many subscribers one send can reach (1,000,000 by default) |
wppn_detected_hosting_preset | Override the auto-detected hosting level. Lets a host add-on select dedicated. |
wppn_rate_limit_window_seconds, wppn_rate_limit_max_requests | The subscribe route's per-visitor rate limit (20 requests per 600 seconds by default) |
wppn_trust_x_forwarded_for | Trust the forwarded IP header when rate limiting behind a proxy. Off by default. |
wppn_allowed_endpoint_host_suffixes | Extra push-service host names to allow, on top of Google, Mozilla, Microsoft, and Apple |