Admin Notifications and Announcements
Benecaster displays admin notices in two places: a notification bell (π) in the Benecaster top bar and a persistent notice bar above all Benecaster screens. Both surfaces draw from the same benecaster_notices table. What appears where depends on each noticeβs display_mode.
Where Notices Appear
Notification bell β the π icon in the Benecaster top bar shows a badge with the count of unread notices at or above your minimum severity preference. Clicking opens a slide-in panel listing each notice with its tier badge, title, message, timestamp, and dismiss button. A ββ Allβ button dismisses all currently visible notices at once.
Persistent notice bar β a full-width colored stripe above all Benecaster admin screens, below the WordPress admin toolbar. Used for high-priority notices that need to stay visible until acknowledged or resolved. When multiple bar-eligible notices exist, only the highest-tier one is shown. A close [β] button dismisses a dismissible bar notice; non-dismissible bar notices remain until the underlying condition clears.
display_mode controls which surface a notice uses:
| Value | Where it appears |
|---|---|
bell |
Bell panel only (default for most notices) |
bar |
Persistent bar only |
both |
Both surfaces simultaneously |
Critical notices default to both. All others default to bell.
Notice Tiers
| Tier | Color | Always shown | Example |
|---|---|---|---|
| Critical | Red | Yes β cannot be suppressed | Security vulnerability, expired license |
| Warning | Amber | No | PHP approaching end-of-life, feed errors |
| Info | Blue | No | Subscriber milestone, new feature announcement |
| Tip | Purple | No | Setup step incomplete, usage hint |
| Marketing | Teal | No | Add-on promotion, upgrade nudge |
Notification Severity Preference
Settings β Notifications lets you set the minimum notice tier you want to see. The dropdown has four options:
| Option | What it hides |
|---|---|
| Critical only | All notices except critical |
| Warnings and above | Info, tip, and marketing |
| Info and above | Tip and marketing |
| Show all notices (including promotions) | Nothing |
Default is βShow all notices.β Critical notices are always shown regardless of this setting. The preference is stored as benecaster_min_notice_tier in wp_options and is site-wide β it applies to all admin users.
Built-in Health Checks
Benecaster runs seven health check classes and generates local notices automatically. Most checks run once per admin session (transient-gated so they do not fire on every page load). The feed health check and license server check also run on the daily license validation cron, so they surface even on days when no admin visits the site.
PHP Version
| Trigger | Tier | Dismissible |
|---|---|---|
| PHP is below the minimum supported version | Critical | No |
| PHP is within 12 months of its end-of-life date | Warning | Yes |
WordPress Version
| Trigger | Tier | Dismissible |
|---|---|---|
| WordPress is below the minimum recommended version | Warning | Yes |
Feed Health
| Trigger | Tier | Dismissible |
|---|---|---|
| RSS feed has returned errors on 3 or more consecutive checks | Warning | Yes |
Runs on the daily cron in addition to admin page loads, so feed errors surface promptly without requiring a site visit.
License Server
| Trigger | Tier | Dismissible |
|---|---|---|
| License server unreachable for more than 7 days | Warning | Yes β re-surfaces every 7 days while the condition persists |
| License expires within 30 days | Warning | Yes β re-surfaces every 7 days while the condition persists |
| License has expired and is in the grace period | Critical | No |
Runs on the daily cron alongside the license validation request. The two dismissible notices re-surface every 7 days as long as the underlying condition is still true β dismissing them is a βremind me later,β not a permanent suppression.
Setup Completion
| Trigger | Tier | Dismissible |
|---|---|---|
| Setup wizard not completed more than 7 days after activation | Tip | Yes |
| No published episodes more than 30 days after activation | Tip | Yes |
Milestones
| Trigger | Tier | Dismissible |
|---|---|---|
| Subscriber count reaches 10, 50, 100, 250, 500, or 1,000 | Info | Yes |
| Episode count reaches 10, 25, 50, or 100 | Info | Yes |
Listener Support Setup
| Trigger | Tier | Dismissible |
|---|---|---|
| Listener Support is enabled but Stripe is not configured (checked weekly) | Warning | Yes |
Feed Request Log
| Trigger | Tier | Dismissible |
|---|---|---|
| Feed request log row count exceeded the configured hard cap and oldest rows were deleted | Warning | Yes β re-surfaces every 7 days while the log remains above cap |
Appears when the nightly cron pass detects the raw feed request log (benecaster_feed_request_log) has grown past the hard row cap. Benecaster automatically trims the oldest rows to 80% of cap when this happens, but the notice re-surfaces every 7 days as long as the log remains near the limit β a prompt to raise the cap or shorten the retention window at Settings β Tools β Feed request log. See Feed Request Log Retention β.
License Server Notices
The license server pushes notices as part of the daily POST /validate response. These cover security alerts, version announcements, deprecation warnings, feature announcements, and promotional messages. Benecaster stores them in the benecaster_notices table with source = 'remote' and processes them alongside local health notices in the bell panel and notice bar.
Remote notices respect your severity preference setting β a marketing promotion from the server is hidden if you have set your minimum to βWarnings and above.β
All dismissals are site-wide. Dismissed License Server notices do not automatically return after a period of time β once dismissed, a notice with the same ID stays gone. The server can re-surface a notice by issuing a new notice ID (for example, appending -reminder to a security alert slug), which is treated as a distinct notice by Benecaster.
Dismissal
Once any admin on the site dismisses a notice, it is gone for the entire installation β with three exceptions. The following notices re-surface every 7 days as long as the underlying condition persists:
- License expires within 30 days
- License server unreachable for more than 7 days
- Feed request log hit the emergency row cap
Dismissing any of these is a βremind me later,β not a permanent suppression. You cannot configure the 7-day cadence β it is set per-notice in code and is not exposed in Settings.
Critical notices are non-dismissible β they remain visible until the underlying condition resolves. When a critical condition clears (for example, you update PHP past the minimum version), the notice is removed on the next health check run.
For Developers
The notification system is extensible via two filter hooks documented in the Filter Hooks Reference:
benecaster_before_notice_displayβ modify or suppress a notice per display context (bellorbar) just before it is included in the REST responsedisplay_mode_in
The re-surfacing behavior is controlled by a re_dismiss_after field on NoticeManager::publish() data arrays. Pass a positive integer (days) to opt a notice into the 7-day re-dismissal cycle; omit the field or pass 0 to preserve the default βdismiss = suppress foreverβ behavior for that notice. This field is code-side only β it is not configurable per-user or per-installation.