{"id":361214,"date":"2026-09-02T08:14:48","date_gmt":"2026-09-02T08:14:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/desk9-notice-planner-announcement-bar-scheduler\/"},"modified":"2026-09-02T08:14:18","modified_gmt":"2026-09-02T08:14:18","slug":"desk9-notice-planner","status":"publish","type":"plugin","link":"https:\/\/pan.wordpress.org\/plugins\/desk9-notice-planner\/","author":23303522,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"Desk9 Notice Planner \u2013 Announcement Bar & Scheduler","header_author":"Tobias Kurth","header_description":"Create, schedule and automatically display site notices as an announcement bar or fullscreen notice \u2013 with date ranges, yearly recurring periods and a year calendar.","assets_banners_color":"0f172a","last_updated":"2026-09-02 08:14:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/desk9.design","header_author_uri":"https:\/\/desk9.design\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"desk9","date":"2026-09-02 08:14:18","revision":3677449}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3677449,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3677449,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3677449,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3677449,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3677449,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3677449,"resolution":"3","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Notice editor: tabbed controls on the left, the live preview stays visible on the right.","2":"Style sets and tones in the design tab.","3":"Year calendar with notice markers and conflict highlighting.","4":"Quick Notice screen with the template gallery.","5":"Announcement bar on the frontend.","6":"Fullscreen notice on the frontend.","7":"Settings screen."}},"plugin_section":[],"plugin_tags":[7553,278808,1290,278807,253827],"plugin_category":[],"plugin_contributors":[244725],"plugin_business_model":[],"class_list":["post-361214","plugin","type-plugin","status-publish","hentry","plugin_tags-announcement-bar","plugin_tags-fullscreen-notice","plugin_tags-notification-bar","plugin_tags-scheduled-notice","plugin_tags-vacation-notice","plugin_contributors-desk9","plugin_committers-desk9"],"banners":{"banner":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/banner-772x250.png?rev=3677449","banner_2x":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/banner-1544x500.png?rev=3677449","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/icon-256x256.png?rev=3677449","icon_2x":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/icon-256x256.png?rev=3677449","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/screenshot-1.png?rev=3677449","caption":"Notice editor: tabbed controls on the left, the live preview stays visible on the right."},{"src":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/screenshot-2.png?rev=3677449","caption":"Style sets and tones in the design tab."},{"src":"https:\/\/ps.w.org\/desk9-notice-planner\/assets\/screenshot-3.png?rev=3677449","caption":"Year calendar with notice markers and conflict highlighting."}],"raw_content":"<!--section=description-->\n<p>Desk9 Notice Planner is a lightweight plugin for informative site notices: vacation and holiday closures, changed opening hours, maintenance windows, delivery delays and short announcements. Create a notice once, schedule it precisely and let it appear and disappear automatically \u2013 evaluated in your site's timezone on every page view.<\/p>\n\n<p>It is deliberately <strong>not<\/strong> an aggressive marketing popup tool. The focus is on serious, accessible communication with your visitors.<\/p>\n\n<h4>Two display layouts<\/h4>\n\n<ul>\n<li><strong>Announcement Bar<\/strong> \u2013 a slim bar at the top or bottom of your site. Static, sticky or fixed, optionally pushing your content down instead of covering it. Choose whether it runs edge to edge with square corners, or floats as an inset message with a gap on all sides and rounded corners - the two never mix. Sets with hard edges can be softened per notice: keep their shadows and accent lines, swap everything for one thin outline, or go completely flat.<\/li>\n<li><strong>Fullscreen Notice<\/strong> \u2013 an accessible dialog for critical information, with focus management, scroll lock and keyboard support.<\/li>\n<\/ul>\n\n<h4>Scheduling that understands your year<\/h4>\n\n<ul>\n<li>Always active, exact date ranges (start\/end with time), or <strong>yearly recurring periods<\/strong>.<\/li>\n<li>Yearly periods may cross the year boundary \u2013 \"December 24 until January 2\" simply works, every year, including leap years.<\/li>\n<li>All times use the timezone from Settings \u2192 General. Visibility is computed on each page view, not via cron, so notices appear exactly on time.<\/li>\n<li>A <strong>year calendar<\/strong> in the admin area shows all planned notices at a glance, including conflicts.<\/li>\n<\/ul>\n\n<h4>Fast to use<\/h4>\n\n<ul>\n<li><strong>27 ready-made templates<\/strong> \u2013 summer vacation, public holiday, maintenance window, shipping delay, new address, privacy policy update, product safety notice and more. Pick a situation and the notice is prefilled.<\/li>\n<li><strong>Quick Notice<\/strong>: publish a simple notice in seconds; refine it later in the full editor.<\/li>\n<li><strong>The editor shows what you build.<\/strong> Controls sit on the left, the rendered notice stays visible on the right while you change anything \u2013 with desktop, tablet and mobile widths and a light or dark sample page.<\/li>\n<li><strong>Ten style sets \u00d7 five tones.<\/strong> Pick a look \u2013 from a bold solid bar to a soft tinted hairline, an elevated card, a dark surface or a neutral surface with a coloured accent rail \u2013 then pick how urgent it is: neutral, info, warning, important or success. Spacing, corners, borders and type come with the set.<\/li>\n<li>Every one of the 50 combinations was checked against WCAG 2.2 AA contrast. Individual colours and spacing can still be overridden per notice.<\/li>\n<li>Your theme's font is used \u2013 no webfonts are loaded.<\/li>\n<\/ul>\n\n<h4>Thoughtful behavior<\/h4>\n\n<ul>\n<li>Visitors can dismiss a notice for the session, until the notice ends, or for a custom number of days \u2013 stored only in their browser, without cookies.<\/li>\n<li>When you edit a notice, previously dismissed notices reappear automatically (content versioning).<\/li>\n<li><strong>Show it again on demand.<\/strong> A \"Show again\" action in the notice list and in the editor voids every stored dismissal, so people who closed the notice see it once more. To check it yourself without affecting anyone, append <code>?d9notice_show=1<\/code> to any URL while logged in.<\/li>\n<li>Priorities (0\u2013100) and a global mode decide what happens when several notices overlap: show only the highest one or stack up to three bars. Conflicts are flagged in the list, the editor and the calendar.<\/li>\n<li>Display rules: entire site, homepage only, selected content, or everything except selected content \u2013 plus context limits (front page, blog page, singular, archives, search, 404) and device visibility.<\/li>\n<\/ul>\n\n<h4>Multilingual<\/h4>\n\n<ul>\n<li>WPML and Polylang compatible (wpml-config.xml included). Untranslated notices are hidden or fall back to the default language \u2013 your choice.<\/li>\n<\/ul>\n\n<h4>Built properly<\/h4>\n\n<ul>\n<li>No external requests, no telemetry, no tracking, no cookies, no bundled frameworks, no jQuery on the frontend.<\/li>\n<li>Frontend CSS\/JS load only when a notice is actually displayed.<\/li>\n<li>WCAG 2.2 AA oriented markup: named regions, real dialog semantics, focus trap, visible focus, reduced-motion support.<\/li>\n<li>Custom capabilities plus a ready-made <strong>Notice Manager<\/strong> role, nonce-protected actions, strict input validation, escaped output.<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>Desk9 Notice Planner does not collect, store or transmit any personal data. It makes no external requests, loads no external resources and sets no cookies. The optional dismiss feature stores the dismissal state exclusively in the visitor's own browser (sessionStorage\/localStorage, keys prefixed with <code>d9notice:notice:<\/code>); these entries expire automatically and can be removed by clearing the browser storage.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/desk9-notice-planner\/<\/code>, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to <strong>Notices \u2192 Add New<\/strong> (or <strong>Notices \u2192 Quick Notice<\/strong>) to create your first notice.<\/li>\n<li>Enable the notice, choose a schedule and publish it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20my%20published%20notice%20not%20visible%3F\"><h3>Why is my published notice not visible?<\/h3><\/dt>\n<dd><p>A notice is displayed only when all of these are true: it is published, \"Enable this notice\" is checked, its schedule is currently active, its display rules match the current page, and (on multilingual sites) it matches the visitor's language. The computed status is shown in the notice list and in the Schedule box.<\/p><\/dd>\n<dt id=\"when%20exactly%20does%20a%20notice%20end%3F\"><h3>When exactly does a notice end?<\/h3><\/dt>\n<dd><p>The end is exclusive: a notice with end \"January 2, 23:59\" disappears at exactly 23:59. All times use the timezone configured under Settings \u2192 General.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20colours%3F\"><h3>Can I use my own colours?<\/h3><\/dt>\n<dd><p>Yes. Every notice starts from a style set and a tone, which together define all fourteen colour slots. In the Design tab you can switch on \"Override individual colours\" and set any of them with the WordPress colour picker; fields you leave empty keep the colour of the set. Spacing, radius and typography can be fine-tuned the same way. There is no free-text CSS field \u2013 all values are validated and rendered as CSS custom properties.<\/p><\/dd>\n<dt id=\"i%20dismissed%20a%20notice%20myself%20and%20cannot%20get%20it%20back.%20what%20now%3F\"><h3>I dismissed a notice myself and cannot get it back. What now?<\/h3><\/dt>\n<dd><p>Two ways, depending on what you want:<\/p>\n\n<ul>\n<li><strong>Only for you, to check something:<\/strong> append <code>?d9notice_show=1<\/code> to any URL of your site. While you are logged in and allowed to edit notices, dismissals are ignored for that single page view. Nobody else is affected.<\/li>\n<li><strong>For everyone who closed it:<\/strong> use the \"Show again\" row action in the notice list, or the \"Show again for everyone\" button in the notice editor under Dismissal. This raises the notice's content version, which is part of the browser storage key, so every stored dismissal stops matching and the notice reappears.<\/li>\n<\/ul>\n\n<p>Nothing is read from or written to a visitor's device in either case - their old entry simply becomes irrelevant and expires on its own terms.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20set%20cookies%3F\"><h3>Does the plugin set cookies?<\/h3><\/dt>\n<dd><p>No. The optional dismiss feature stores a small entry in the visitor's browser storage (<code>sessionStorage<\/code> or <code>localStorage<\/code>) under keys like <code>d9notice:notice:123:v4<\/code>. Nothing is transmitted anywhere, and the entry expires with the notice or the chosen duration. If browser storage is blocked, the notice simply stays visible.<\/p><\/dd>\n<dt id=\"can%20somebody%20manage%20notices%20without%20being%20an%20administrator%3F\"><h3>Can somebody manage notices without being an administrator?<\/h3><\/dt>\n<dd><p>Yes. On activation the plugin creates a dedicated <strong>Notice Manager<\/strong> role. Assign it to a user and their admin area contains nothing but Dashboard, Media, Profile and Notices - they can write, schedule and publish notices and reach the plugin settings, but they cannot touch posts, pages, plugins, themes or other users.<\/p>\n\n<p>The role holds every plugin capability plus <code>read<\/code> (needed to enter wp-admin at all) and <code>upload_files<\/code> (needed for the image field). If the role already exists, the plugin leaves it alone, so any adjustments you make with a role editor survive a reactivation.<\/p>\n\n<p>You can also grant the capabilities to an existing role instead: <code>edit_d9notices<\/code>, <code>edit_others_d9notices<\/code>, <code>publish_d9notices<\/code>, <code>delete_d9notices<\/code> and <code>manage_d9notice_settings<\/code> for the settings screen.<\/p>\n\n<p>The role is only deleted again if you enable \"Remove the plugin capabilities ...\" under Notices \u2192 Settings \u2192 Advanced before uninstalling. Users keep their accounts either way.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20wpml%20and%20polylang%3F\"><h3>Is the plugin compatible with WPML and Polylang?<\/h3><\/dt>\n<dd><p>Yes. The notice post type is registered as translatable, a <code>wpml-config.xml<\/code> defines which fields are translated and which are copied, and a setting controls whether untranslated notices are hidden or fall back to the default language. The plugin also works without any multilingual plugin.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20themes%3F\"><h3>Does it work with block themes?<\/h3><\/dt>\n<dd><p>Yes, classic and block themes are supported. For themes that do not call <code>wp_body_open<\/code>, a fallback output path is used.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20uninstall%3F\"><h3>What happens on uninstall?<\/h3><\/dt>\n<dd><p>Nothing is deleted unless you enabled \"Delete all plugin data on uninstall\" (and optionally \"Remove plugin capabilities on uninstall\") under Notices \u2192 Settings \u2192 Advanced.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: announcement bars and fullscreen notices, a dedicated Notice Manager role, date-range and yearly recurring scheduling in the site timezone, year calendar, Quick Notice with 27 templates, ten style sets with five semantic tones, a two-column editor with a permanently visible live preview, dismissal with content versioning, priorities and conflict detection, display rules, WPML\/Polylang compatibility, accessibility-first frontend.<\/li>\n<\/ul>","raw_excerpt":"Create and schedule site notices as an announcement bar or fullscreen notice \u2013 with date ranges, yearly recurring periods and a year calendar.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361214"}],"author":[{"embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/desk9"}],"wp:attachment":[{"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361214"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361214"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361214"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361214"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361214"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pan.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}