A line across the top of the shop: a sale, a shipping deadline, "spend £10 more for free delivery". Shown only where and when it should be.
Three things make this different from the rest of the category.
A dismissed bar never paints. A bar is server-rendered, so it works before any script has run and a page cache can serve it — but a dismissal is a fact about one visitor, which a cache cannot know. Every plugin here therefore renders the bar and removes it from a load handler, so a shopper who closed it three weeks ago watches it appear and vanish on every page. The fix is not to render later but to decide earlier: one tiny snippet in the head reads the cookie and puts a class on the root element before anything paints.
Everything is decided on the server. The schedule, the pages, the cart value, the categories in the cart, the role, the cutoff time. A plugin that ships every bar to every page and picks one in JavaScript has published its whole promotion calendar to anybody who opens the source.
A bar is text somebody typed, and it is treated that way. The message passes wp_kses_post() at save *and* at render, because an import bypasses the editor; a javascript: destination never becomes a link; and a colour is validated as a colour rather than pasted into a style attribute. The category's leader has a CVE history, and every one of those is the same shape.
Conditions
Pages (or everywhere except pages), cart value at least or at most, cart empty, a category in the cart, the visitor's role (guest included), and "before this time today" for shipping deadlines — judged on the store's own clock. Every condition on a bar must be true; adding one narrows who sees it, never widens.
Every license includes
- One year of updates and priority support, delivered straight to your WordPress dashboard.
- Use on 1, 5 or 25 sites depending on your license — local, staging and development sites are always free.
- 30-day money-back guarantee — full refund, no questions asked.
- Keeps working after expiry — if you choose not to renew, the plugin keeps running exactly as installed; it simply stops receiving updates and support until you do.
Requires WordPress 6.4+ · PHP 7.4+ · tested up to WordPress 7.0. Works with the classic and block checkout alike.

L. Fletcher (verified owner) –
The docs are written by somebody who has used the thing. Announcement Bar is the first thing I install on a new build now.
Gary T. (verified owner) –
Activated it, filled in three boxes, done. Announcement Bar works with the theme I am using, and I had half expected it not to. No reservations at all.
Jessica B. (verified owner) –
Works on a multisite install, which I couldn’t say for the last one. Announcement Bar plays nicely with the rest of my plugins.
Maxime (verified owner) –
A remplacé une extension bien plus lourde qui en faisait la moitié. Announcement Bar tourne en production sans le moindre souci. Je recommande sans réserve.
Mark C. (verified owner) –
It didn’t fight my theme, which I half expected.