{"id":337102,"date":"2026-07-16T07:31:12","date_gmt":"2026-07-16T07:31:12","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smart-announcements-popup\/"},"modified":"2026-07-16T08:19:52","modified_gmt":"2026-07-16T08:19:52","slug":"noticewave-popup","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/noticewave-popup\/","author":23528976,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"trunk","tested":"7.0.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"NoticeWave Popup","header_author":"Agrata","header_description":"Targeted announcement popups with scheduling, display rules, and auto-dismiss timers.","assets_banners_color":"","last_updated":"2026-07-16 08:19:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/agrata77\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.2.0":"<p>Recommended update. Fixes a silent data corruption bug in quick-edit priority saves. Also resolves a date timezone issue that could cause popups to appear or expire a day early\/late for visitors outside UTC.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3609882,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3609882,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The 5-step wizard \u2014 Step 1: Setup (status toggle, priority, announcement type).","2":"Step 2: Schedule \u2014 set a start and end date for automatic display.","3":"Step 3: Audience \u2014 target all pages, the homepage, or specific pages.","4":"Step 4: Content \u2014 add a title, description, and banner image.","5":"Step 5: Action \u2014 configure a CTA button, clickable banner, or WhatsApp link.","6":"The announcements list table with live Status (Active \/ Scheduled \/ Expired \/ Inactive), Priority, Schedule, and Display columns.","7":"A rendered popup example showing a banner image, title, description, and CTA button."}},"plugin_section":[],"plugin_tags":[7540,784,1159,491,3160],"plugin_category":[],"plugin_contributors":[271828],"plugin_business_model":[],"class_list":["post-337102","plugin","type-plugin","status-publish","hentry","plugin_tags-announcement","plugin_tags-banner","plugin_tags-notification","plugin_tags-popup","plugin_tags-whatsapp","plugin_contributors-agrata77","plugin_committers-agrata77"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/noticewave-popup\/assets\/icon-128x128.png?rev=3609882","icon_2x":"https:\/\/ps.w.org\/noticewave-popup\/assets\/icon-256x256.png?rev=3609882","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>NoticeWave Popup<\/strong> lets you create and manage rich announcement popups for your WordPress site through a clean, step-by-step wizard. Show event notices, admission alerts, general updates, or any time-sensitive information to your visitors \u2014 with full control over when, where, and how they appear.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>5-step wizard interface<\/strong> \u2014 configure each announcement through a guided Setup \u2192 Schedule \u2192 Audience \u2192 Content \u2192 Action flow.<\/li>\n<li><strong>Scheduling<\/strong> \u2014 set a start date and end date. Announcements automatically appear and disappear on the correct day with no manual intervention needed.<\/li>\n<li><strong>Priority system<\/strong> \u2014 when multiple active announcements exist, the one with the highest priority (1\u2013100) is shown first. Lower-priority ones appear after visitors dismiss the first.<\/li>\n<li><strong>Audience targeting<\/strong> \u2014 show a popup on all pages, the homepage only, or specific pages you choose.<\/li>\n<li><strong>Announcement types<\/strong> \u2014 categorise as Event, Admission, Alert, or General; each type gets a distinct color badge in the admin list.<\/li>\n<li><strong>Rich content<\/strong> \u2014 optional title, description (with HTML support via the WordPress content filter), and a banner image.<\/li>\n<li><strong>Call to action<\/strong> \u2014 choose between a clickable button (custom URL), a clickable banner image, or no action at all. WhatsApp is natively supported with country flag + dial-code selection.<\/li>\n<li><strong>Auto-close timer<\/strong> \u2014 optionally auto-dismiss the popup after 5, 10, or 30 seconds.<\/li>\n<li><strong>Cookie-based dismiss tracking<\/strong> \u2014 once a visitor closes a popup, it is suppressed for a configurable number of days so it never feels spammy.<\/li>\n<li><strong>Accessibility<\/strong> \u2014 full keyboard navigation, ARIA roles (<code>dialog<\/code>, <code>aria-modal<\/code>, <code>aria-labelledby<\/code>), focus trapping, and focus restoration on dismiss.<\/li>\n<li><strong>No external dependencies<\/strong> \u2014 all assets (including the intl-tel-input library for WhatsApp dial codes) are bundled locally. No CDN calls, no tracking.<\/li>\n<li><strong>Fully translatable<\/strong> \u2014 every admin and frontend string is wrapped in WordPress i18n functions and ready for <code>.po<\/code>\/<code>.mo<\/code> translation files.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>NoticeWave Popup<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin <code>.zip<\/code> file.<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Choose the <code>.zip<\/code> file and click <strong>Install Now<\/strong>.<\/li>\n<li>Click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>Getting Started<\/h4>\n\n<ol>\n<li>After activation, find <strong>Announcements<\/strong> in the WordPress admin sidebar.<\/li>\n<li>Click <strong>Add New Announcement<\/strong>.<\/li>\n<li>Work through the 5 wizard steps: Setup, Schedule, Audience, Content, and Action.<\/li>\n<li>Set the post status to <strong>Published<\/strong> and make sure the <strong>Announcement status<\/strong> toggle (Step 1) is enabled.<\/li>\n<li>Visit your site \u2014 the popup will appear automatically.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20does%20priority%20work%3F\"><h3>How does priority work?<\/h3><\/dt>\n<dd><p>Each announcement has a priority value from 1 to 100. When multiple announcements are active and scheduled for the same page, the one with the highest number is shown first. After a visitor dismisses it, the next-highest priority announcement will appear on their next visit (subject to the cookie duration setting).<\/p><\/dd>\n<dt id=\"can%20i%20show%20different%20announcements%20on%20different%20pages%3F\"><h3>Can I show different announcements on different pages?<\/h3><\/dt>\n<dd><p>Yes. In Step 3 (Audience), choose <strong>All Pages<\/strong>, <strong>Homepage Only<\/strong>, or <strong>Specific Pages<\/strong> and select exactly which pages should display the popup.<\/p><\/dd>\n<dt id=\"how%20do%20i%20stop%20an%20announcement%20from%20showing%20permanently%3F\"><h3>How do I stop an announcement from showing permanently?<\/h3><\/dt>\n<dd><p>Either set an <strong>End Date<\/strong> in Step 2 (Schedule) so it expires automatically, or toggle the <strong>Announcement status<\/strong> switch in Step 1 to disable it manually. Disabled announcements are never shown regardless of dates.<\/p><\/dd>\n<dt id=\"the%20popup%20still%20shows%20after%20the%20end%20date%20%E2%80%94%20why%3F\"><h3>The popup still shows after the end date \u2014 why?<\/h3><\/dt>\n<dd><p>The expiration check runs client-side using the visitor's local device time, so there is no server-round-trip delay. If the popup still appears, make sure your page caching plugin has been cleared after you saved the end date.<\/p><\/dd>\n<dt id=\"can%20visitors%20see%20the%20popup%20again%20after%20closing%20it%3F\"><h3>Can visitors see the popup again after closing it?<\/h3><\/dt>\n<dd><p>Yes. The <strong>Dismiss cookie duration<\/strong> setting (under <strong>Announcements \u2192 Settings<\/strong>) controls how many days the popup is suppressed after a visitor closes it. Set it to <code>0<\/code> to show the popup on every page load.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20whatsapp%3F\"><h3>Does the plugin support WhatsApp?<\/h3><\/dt>\n<dd><p>Yes. In Step 5 (Action), select <strong>WhatsApp<\/strong> as the destination type, then choose your country flag and enter your local number. The plugin constructs a valid <code>wa.me<\/code> deep-link automatically. On mobile devices it uses the native <code>whatsapp:\/\/<\/code> URI scheme so the app opens directly.<\/p><\/dd>\n<dt id=\"is%20there%20any%20tracking%20or%20third-party%20data%20sharing%3F\"><h3>Is there any tracking or third-party data sharing?<\/h3><\/dt>\n<dd><p>No. The plugin makes no external HTTP requests. All assets \u2014 including the country flag library \u2014 are bundled locally. No data is sent to any third-party server.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20page%20caching%20plugins%3F\"><h3>Is it compatible with page caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Because date\/expiry logic is evaluated in the visitor's browser (not on the server), the popup correctly respects its schedule even when WordPress serves a cached page.<\/p><\/dd>\n<dt id=\"how%20do%20i%20translate%20the%20plugin%3F\"><h3>How do I translate the plugin?<\/h3><\/dt>\n<dd><p>The plugin uses the text domain <code>noticewave-popup<\/code>. Create <code>.po<\/code> and <code>.mo<\/code> files in <code>wp-content\/languages\/plugins\/<\/code> using a tool like Poedit. All admin and frontend strings are fully wrapped with WordPress i18n functions.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: Priority input field directly in the wizard Setup step.<\/li>\n<li>Added: Automated background migration to assign default priority to legacy announcements.<\/li>\n<li>Added: Four-state Status column in the admin list (Active, Inactive, Expired, Scheduled) with color-coded indicators.<\/li>\n<li>Fixed: Announcement title not saving correctly on some live server configurations (migrated title mapping to <code>wp_insert_post_data<\/code> filter).<\/li>\n<li>Fixed: Quick-edit Priority field was reading post ID instead of stored priority value \u2014 causing silent data corruption on every quick-edit save.<\/li>\n<li>Fixed: Custom option cards (type, audience, CTA, timer) required multiple clicks in some browsers due to <code>display: none<\/code> on radio inputs; replaced with accessible visually-hidden technique.<\/li>\n<li>Fixed: Auto-close timer cancellation race condition where manual close and timer expiry could both fire simultaneously.<\/li>\n<li>Fixed: Date boundary evaluation now uses local device timezone instead of UTC, preventing off-by-one-day errors for visitors in UTC+ timezones.<\/li>\n<li>Improvement: Converted all JavaScript from ES5 <code>var<\/code> to block-scoped <code>const<\/code>\/<code>let<\/code>.<\/li>\n<li>Improvement: All external CDN assets (intl-tel-input) replaced with locally bundled copies.<\/li>\n<li>Improvement: All admin UI strings are now fully wrapped in WordPress i18n functions.<\/li>\n<li>Improvement: Added required WordPress.org plugin headers (<code>Requires at least<\/code>, <code>Tested up to<\/code>, <code>Requires PHP<\/code>).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: WhatsApp CTA support with country flag and dial-code selector (intl-tel-input).<\/li>\n<li>Added: Clickable banner mode \u2014 the banner image itself becomes the call-to-action link.<\/li>\n<li>Added: Auto-close timer (Off \/ 5 sec \/ 10 sec \/ 30 sec).<\/li>\n<li>Added: Text visibility toggles \u2014 independently show or hide title and description in the popup.<\/li>\n<li>Added: Page-specific cookie key \u2014 dismissing a popup on one page does not suppress it on other pages.<\/li>\n<li>Fixed: Accessibility \u2014 full keyboard navigation, ARIA dialog roles, focus trap, and focus restoration.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>5-step wizard for creating announcements.<\/li>\n<li>Scheduling with start and end dates.<\/li>\n<li>Display targeting (all pages, homepage, specific pages).<\/li>\n<li>Priority-based display ordering.<\/li>\n<li>Cookie-based dismiss suppression.<\/li>\n<\/ul>","raw_excerpt":"Display targeted announcement popups with scheduling, display rules, and auto-dismiss timers \u2014 no coding required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/337102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=337102"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/agrata77"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=337102"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=337102"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=337102"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=337102"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=337102"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=337102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}