Features

Newsletter (Article Digest & Instant Alerts)

Last updated July 7, 2026

Super Speedy Emails ships an article newsletter that pulls from your WordPress posts. Subscribers pick which top-level post categories interest them, choose between instant alerts (as articles publish) and a twice-weekly digest (default Tuesday + Saturday at 12:00 GMT), and you don’t have to compose anything manually — the newsletter is generated from your published posts.

This page covers configuring the newsletter and how it behaves.


How the newsletter works

Two delivery modes per subscriber:

  1. Instant — when a post is published in a category they care about, they get an email immediately containing the title, excerpt, and link.
  2. Digest — every Tuesday and Saturday at noon GMT (configurable), they get one email listing all posts published since their last digest, filtered to their preferred categories. Subscribers with zero matching posts in the window don’t get an email — no “we have nothing for you today” mails.

Both modes use the newsletter category. They respect marketing suppressions (an unsubscribed person won’t get them) and per-category unsubscribes (if they’ve turned off the “Performance” category specifically, that one is filtered from their digest).


Step 1 — Enable the categories you want to email about

Go to SSE Emails > Newsletter > Allowed categories.

You’ll see a checkbox for every top-level WordPress post category (parent=0). The list is auto-pulled from wp_terms — if you add a new top-level category to WordPress, it appears here unchecked next time you visit the page.

Check the categories you want to be available for newsletter subscribers. Subscribers can only opt into categories you’ve enabled. Sub-categories (categories with a parent) are not shown — when a post is published in a sub-category, SSE walks up the parent chain to find the top-level category and uses that.

Save settings.


Step 2 — Configure the digest schedule

Same page, Digest schedule section. The default is two slots:

  • Tuesday 12:00 GMT
  • Saturday 12:00 GMT

Add more slots, remove them, or change the day-of-week / hour. The schedule is checked every hour by a WP-cron event; if the current GMT day-of-week and hour match any configured slot, the digest fires.

All times are GMT — there’s no per-subscriber timezone. The reasoning is that GMT midday is “reasonably reachable” across North America (morning) and Europe (afternoon), and avoids the operational headache of running 24 different sends per day.

If you change the schedule, the next run picks up the new times — no need to restart cron or do anything magical.


Step 3 — Add an optional digest intro

In the Digest body intro field, add any text you want to appear above the list of posts in every digest email. Examples:

  • “Hi! Here’s what we’ve published since the last digest.”
  • “This week on Super Speedy Plugins:”

Leave empty to skip the intro. The email body is otherwise just the list of post titles + excerpts + links, plus the unsubscribe footer.


Step 4 — What subscribers see

Two places subscribers can manage their newsletter preferences:

  1. The subscription management page — the page you configured under Settings > General > Subscription Management Page. Has two new sections after Phase 2: – Newsletter categories — checkboxes for each enabled category – Frequency — radio: As articles are published / Twice-weekly digest
  2. WooCommerce My Account > Email Preferences — same UI inside the customer’s account area (only if you’ve enabled the WC tab in Settings > WooCommerce).

Subscribers who have never explicitly chosen are defaulted in to all enabled categories at digest frequency. The reasoning: when someone joins your list, the polite default is “send me the digest of everything” — they can opt out of categories or switch to instant later.

💡 Defaulted-in semantics mean: the absence of a row in sse_newsletter_prefs for (subscriber, category) is treated as subscribed = 1. Once the subscriber visits the management page and saves, an explicit row is written, and missing categories are interpreted as their explicit “no thanks.”


Instant alerts: what triggers a send

When a post moves to publish status (via transition_post_status hook):

  1. SSE looks at the post’s categories.
  2. For each category, it walks up to the top-level parent.
  3. It intersects that list with your enabled categories.
  4. If the intersection is non-empty, it finds all subscribers who: – Have digest_frequency = instant – Have prefers_category for any of those top-level categories (or are defaulted-in) – Are active and marketing-opted-in – Are not suppressed (global, marketing, or that specific category)
  5. One email per matching subscriber is queued.

Edge cases handled:

  • Post in multiple categories → recipient gets one email (dedup), not one per category.
  • Post updated after publish → not re-sent. The transition_post_status hook only fires when the status crosses into publish.
  • Backdated posts → if the publish date is more than X minutes in the past, no instant alert is sent (prevents accidental “old post” blasts when someone fixes a status field).

Digest: what gets included

The hourly cron tick checks: is the current GMT (day-of-week, hour) one of the configured slots? If yes, and at least 60 minutes have passed since the last digest run, fire run_digest():

  1. Find all subscribers with digest_frequency = digest, active, marketing-opted-in.
  2. Collect posts published in the window — since their last digest send, capped at 7 days for new-ish subscribers.
  3. Filter to posts in categories they prefer (climbing to top-level).
  4. If zero matching posts, skip them (no empty digests).
  5. Send each matching subscriber a digest email with the post list.

The window cap exists so that a subscriber who paused and then resumed digests doesn’t get a 90-day flood of old posts in one email.


Manually triggering a digest run

On the Newsletter admin page, Run digest now sends a digest immediately, regardless of schedule. Useful for:

  • Testing your schedule before relying on cron
  • Recovering from a missed run (cron didn’t fire, server was down)
  • Sending a one-off digest mid-week if you’ve just published something important

The button respects test mode — in log_only it goes through the motions without sending real mail.


What if a subscriber has zero preferred categories?

Two scenarios:

  1. They’ve opted out of every category individually. They are treated as “not subscribed to the newsletter” and won’t receive digests or instant alerts. (They may still be on other lists / receive broadcasts via those lists.)
  2. They’ve turned off marketing entirely (marketing-suppressed). Same outcome — they don’t get newsletter emails.

To turn the newsletter off as the whole site owner, just uncheck all categories on the Newsletter admin page. The cron jobs continue to tick but always find zero work to do.


Cron status

The Newsletter admin page shows the next scheduled run timestamp. If you don’t see one, the cron event isn’t registered — try deactivating and reactivating the plugin (the activator re-registers cron jobs).

For sites where WP-Cron isn’t reliable (heavily cached / no real traffic), set up a system cron hitting wp-cron.php directly every minute. That’s also better for the queue drainer and the automation tick.


Related

Leave a Reply

Your email address will not be published. Required fields are marked *

×
1/1