Notice Triage

Description

Every plugin gets to shout at the top of wp-admin, and they all do: licence reminders, review requests, setup wizards, update nags. The existing answer is to hide them, and that creates a worse problem: a genuinely critical warning disappears along with the sales pitch.

Notice Triage does not hide anything. It ranks. It captures every admin notice, works out which plugin or theme emitted it (by reflecting on the hook callback, not by guessing from the text), sorts it into a severity bucket and shows one summary bar: “6 notices — 2 need action, 3 informational, 1 license”. Critical notices stay inline by default, exactly where they were, unmodified. The log then tells you which plugin has shown you the same nag 400 times. Setup banners and onboarding bars that are not standard notice markup are collapsed as well; scripts and hidden templates pass through untouched. Nothing is deleted, nothing is rewritten; the panel simply moves the noise out of the way and labels each notice with its source.

Buckets

  • Critical — error notices. Shown inline, at the top, by default. You can collapse them too: the panel then opens by itself and turns red whenever a critical notice is present.
  • Needs action — warnings and update nags.
  • Informational — success and info notices.
  • Marketing & license — licence prompts, upgrade pitches, review requests, sales. Collapsed by default whatever colour the plugin painted them. A notice the plugin marked as an error is never put here.

Severity comes from the notice’s declared type, then its CSS classes, then a list of keywords that can only raise a notice (security, failed, database error…). The keyword and marketing lists are visible and editable in Settings and filterable in code.

Notice log

Tools Notice Log lists every distinct notice this admin has seen: the plugin behind it, its bucket, when it first and last appeared and how often it has interrupted you (counted at most once every five minutes per notice, so the log costs nothing on busy sites). The same count shows next to each notice in the panel. From there you can mute a notice for everyone, snooze it for 7 or 30 days, or pin it inline or collapsed regardless of its bucket. Each notice in the panel also has a per-user Snooze link (7 days), and administrators get a Mute link right there. Counters and dates are normalised before logging, so “3 items need attention” and “4 items need attention” are one entry.

Safe by design

This plugin intercepts other plugins’ output, so the recovery paths come first:

  • define( 'NOTICE_TRIAGE_DISABLE', true ); in wp-config.php switches capture off entirely.
  • Append ?notice_triage_off=1 to any admin URL to bypass capture for that one page load — no FTP needed.
  • Capture never runs during AJAX, REST, cron, the Customizer, iframes, or on the update and install screens, and never before the admin screen is known.
  • A per-plugin “always inline” rule and a screen exclusion list exempt anything whose own scripts rely on inline notices.
  • A notice callback that throws is caught and logged instead of taking down wp-admin.

Captured markup is re-emitted byte-for-byte, including ids, classes, data attributes and inline scripts, so each plugin’s own dismiss buttons and AJAX handlers keep working.

Compatibility

Checked on WordPress 7.1 with each plugin’s current release, on a clean site. “Dismiss” means the plugin’s own dismiss control was clicked inside the collapsed panel and the notice stayed dismissed after a reload.

  • Yoast SEO — captured, attributed, “blocking robots” is Critical (inline), first-run configuration notice is Informational. No dismiss control on its notices.
  • Rank Math SEO — captured and attributed; “only one SEO plugin” is Critical and stays inline, its own dismiss works.
  • Elementor — captured and attributed; promotional notices land in Informational, its own dismiss control (e-notice__dismiss) works inside the panel and persists.
  • WooCommerce — no admin_notices output on a fresh store (its notes live in the WooCommerce Admin app). The panel renders on WooCommerce screens without conflict.
  • Jetpack — its connection banners are injected by JavaScript, not printed as admin notices, so they are neither captured nor affected.
  • Wordfence — captured and attributed (“Needs action”); its dismiss button works inside the panel and persists. Its onboarding banner is not a notice and passes through untouched.
  • WPForms — removes every admin notice on its own screens itself; elsewhere nothing to capture on a fresh install.
  • Contact Form 7 — emits no notices on a fresh install; no conflict.
  • UpdraftPlus — welcome notice captured on its settings screen as Informational.

No plugin needed the shipped “always inline” list, which is therefore empty in this release.

Known limitation

A plugin whose JavaScript binds to a position-dependent selector, or binds before the panel exists in the page, may lose its dismiss button when its notice is collapsed. Set that plugin to “Always inline” in Settings Notice Triage Per-plugin rules.

Privacy

Notice Triage stores the plain-text excerpt, source and counts of each notice in a table on your site. It makes no outbound requests and sends nothing anywhere.

Screenshots

Installation

  1. Upload the notice-triage folder to /wp-content/plugins/, or install it from the Plugins screen.
  2. Activate it.
  3. Open any admin screen: non-critical notices are now in a single collapsed panel. Tools Notice Log shows what has been seen; Settings Notice Triage holds the rules.

FAQ

How is this different from the notice-hiding plugins?

Three things. Attribution: every notice is labelled with the plugin or theme whose callback printed it, resolved from the code, so you know who is shouting. Ranking: notices are sorted into Critical, Needs action, Informational and Marketing & license, with a guard rail that never demotes an error notice, so critical warnings cannot vanish into a “hidden” pile. The log: each distinct notice is counted, so you can see which plugin has interrupted you hundreds of times and act on that plugin rather than on one banner.

Does it hide anything?

Not on its own. Every notice is either inline or inside the panel. The only way a notice disappears is a mute or snooze you set yourself, and the panel still counts them. If you collapse the Critical bucket, the panel forces itself open whenever a critical notice is present.

A plugin’s dismiss button stopped working.

Open Settings Notice Triage Per-plugin rules and set that plugin to “Always inline”. Its notices then print exactly where they did before. Please also open a support thread with the plugin’s name so it can be added to the shipped defaults.

Can I change what counts as marketing?

Yes. Settings Notice Triage lists every phrase, one per line. Developers can also use the notice_triage_marketing_patterns and notice_triage_boost_keywords filters, and notice_triage_severity to override the final bucket for a notice.

Does each user get their own settings?

Bucket behaviour and the admin bar badge can be overridden per user on the profile screen. Snoozes set from the panel are per user; mutes and rules set from the Notice Log apply to everyone.

Something broke and I cannot reach wp-admin.

Add ?notice_triage_off=1 to the admin URL to bypass the plugin for one page load, then switch capture off in Settings or deactivate it. For a permanent switch add define( 'NOTICE_TRIAGE_DISABLE', true ); to wp-config.php.

Does it work on multisite?

Yes. Network admin notices are captured on network screens. The log and settings are per site.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Notice Triage” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Notice Triage” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.1.0

  • First release.