{"id":297409,"date":"2026-05-12T12:27:01","date_gmt":"2026-05-12T12:27:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/noticepilot\/"},"modified":"2026-05-12T12:39:25","modified_gmt":"2026-05-12T12:39:25","slug":"noticepilot","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/noticepilot\/","author":21165270,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"NoticePilot","header_author":"spider-themes","header_description":"A self-hosted campaign hub for plugin and theme authors \u2014 push targeted admin notices to remote sites via REST API and SDK, with built-in analytics.","assets_banners_color":"","last_updated":"2026-05-12 12:39:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/spider-themes.net\/","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.1":{"tag":"1.0.1","author":"alimran01","date":"2026-05-12 12:39:25"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Product management dashboard with modern card-based design.","2":"Campaign editor with rich HTML content and scheduling controls.","3":"Integration documentation with copy-paste code snippets.","4":"Analytics dashboard with impression, click, and dismissal tracking.","5":"Campaign detail panel with daily breakdown and performance metrics."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[262668,4932,262669,262667,262666],"plugin_category":[],"plugin_contributors":[226713,252241,209471],"plugin_business_model":[],"class_list":["post-297409","plugin","type-plugin","status-publish","hentry","plugin_tags-campaign-analytics","plugin_tags-developer-tools","plugin_tags-notice-distribution","plugin_tags-plugin-sdk","plugin_tags-remote-notices","plugin_contributors-alimran01","plugin_contributors-muaz404","plugin_contributors-spiderdevs","plugin_committers-alimran01"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/noticepilot.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>NoticePilot is not another admin notice plugin.<\/strong> It is a <strong>self-hosted remote campaign distribution platform<\/strong> built specifically for WordPress plugin and theme authors.<\/p>\n\n<p>If you develop a WordPress plugin used on hundreds or thousands of sites, you need a reliable way to push announcements, update prompts, sale banners, or deprecation warnings to your users \u2014 without shipping a new plugin release for every message. NoticePilot solves this with a <strong>hub-to-remote architecture<\/strong>: you manage campaigns on your own site, and a lightweight PHP SDK in your plugin fetches and displays them automatically.<\/p>\n\n<h4>Who Is This For?<\/h4>\n\n<p>NoticePilot is designed for <strong>WordPress plugin and theme developers<\/strong> who need to communicate with their users across multiple remote installations. It is <strong>not<\/strong> for managing or hiding admin notices on a single site \u2014 there are plenty of plugins for that.<\/p>\n\n<h4>What Makes It Different?<\/h4>\n\n<p>Unlike the 50+ \"admin notice\" plugins in the directory, NoticePilot provides:<\/p>\n\n<ul>\n<li><strong>Hub-to-Remote Architecture<\/strong> \u2014 One central dashboard pushes campaigns to unlimited remote WordPress installations via a REST API. No SaaS dependency \u2014 everything runs on your own site.<\/li>\n<li><strong>Single-File PHP SDK<\/strong> \u2014 Plugin authors bundle one PHP file with their product. One line of code to initialize. The SDK handles fetching, caching, rendering, and dismissal automatically.<\/li>\n<li><strong>Campaign Analytics with Privacy<\/strong> \u2014 Track impressions, clicks, and dismissals across all remote sites. Remote site URLs are MD5-hashed before storage \u2014 no personal data is ever collected or stored.<\/li>\n<li><strong>Audience Targeting<\/strong> \u2014 Target campaigns by free\/pro plan type, plugin version (with comparison operators), and WordPress user roles. Show the right message to the right users.<\/li>\n<li><strong>Campaign Scheduling<\/strong> \u2014 Set start and end dates for time-sensitive campaigns. Expired campaigns auto-disable via WP-Cron without manual intervention.<\/li>\n<li><strong>Rich HTML Campaigns<\/strong> \u2014 Full HTML support including inline CSS, <code>&lt;style&gt;<\/code> blocks, and custom layouts. Your content renders exactly as you write it.<\/li>\n<li><strong>Dismissal Memory<\/strong> \u2014 Users who dismiss a notice won't see it again. Dismissals are stored locally on the remote site with configurable duration and FIFO cleanup.<\/li>\n<li><strong>Two-Table Analytics Engine<\/strong> \u2014 Raw events roll up into daily summaries via an hourly cron job, with automatic pruning. Designed for scale, not unbounded table growth.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li><strong>Create a Product<\/strong> \u2014 Each product represents a plugin, theme, or service you maintain. NoticePilot generates a unique REST API endpoint for it.<\/li>\n<li><strong>Add Campaigns<\/strong> \u2014 Write rich HTML content, optionally set scheduling and targeting rules, then enable.<\/li>\n<li><strong>Integrate the SDK<\/strong> \u2014 Download the single-file PHP SDK, bundle it with your plugin, and initialize with one line of code. The SDK polls your hub and renders active campaigns as admin notices on remote sites.<\/li>\n<li><strong>Track Performance<\/strong> \u2014 Monitor impressions, clicks, dismissals, and click-through rates from the analytics dashboard. Drill down by product or individual campaign with daily breakdowns.<\/li>\n<\/ol>\n\n<h4>Real-World Use Cases<\/h4>\n\n<ul>\n<li><strong>Plugin authors:<\/strong> Push update prompts, deprecation warnings, or feature announcements to users of your plugin \u2014 without shipping a release.<\/li>\n<li><strong>Theme authors:<\/strong> Announce seasonal sales, new theme versions, or compatibility updates directly inside the WordPress admin.<\/li>\n<li><strong>Agency developers:<\/strong> Broadcast maintenance windows, policy changes, or onboarding tips across all client sites from one central hub.<\/li>\n<li><strong>Freemium plugins:<\/strong> Target upgrade prompts specifically to free users while showing different messaging to pro users \u2014 all without code changes.<\/li>\n<\/ul>\n\n<h4>A Self-Hosted Alternative<\/h4>\n\n<p>Today, plugin authors either build custom notice systems from scratch (duplicating effort across every product) or rely on third-party SaaS services (adding external dependencies and privacy concerns). NoticePilot provides a <strong>self-hosted, privacy-respecting, zero-dependency alternative<\/strong> that runs entirely on your own WordPress installation.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>noticepilot<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>NoticePilot<\/strong> in your admin sidebar to start creating products and campaigns.<\/li>\n<\/ol>\n\n<h4>Integrating With Your Plugin or Theme<\/h4>\n\n<p>Once you've created a product and added campaigns on your hub site, follow these steps to display those notices on remote sites:<\/p>\n\n<ol>\n<li>Go to the NoticePilot dashboard and click the <strong>How To Integrate<\/strong> button on your product card.<\/li>\n<li>Click <strong>Download SDK<\/strong> to get the <code>class-remote-notice-client.php<\/code> file.<\/li>\n<li>Copy the file into your plugin or theme directory (e.g., <code>includes\/<\/code>).<\/li>\n<li><p>Add the following code to your plugin's main file or theme's <code>functions.php<\/code>:<\/p>\n\n<p>\/\/ Include the NoticePilot SDK.\nrequire_once <strong>DIR<\/strong> . '\/includes\/class-remote-notice-client.php';<\/p>\n\n<p>add_action( 'plugins_loaded', function() {\n    Noticepilot_Remote_Notice_Client::init( 'your-product-slug', [\n        'api_url'          =&gt; 'https:\/\/your-hub-site.com\/wp-json\/noticepilot\/v1\/content\/your-product-slug',\n        'schedule'         =&gt; 'daily',\n        'dismiss_duration' =&gt; WEEK_IN_SECONDS,\n    ] );\n} );<\/p><\/li>\n<\/ol>\n\n<p>Replace <code>your-product-slug<\/code> with the endpoint shown on your product card, and <code>your-hub-site.com<\/code> with the URL of the site where NoticePilot is installed.<\/p>\n\n<p><strong>Available options:<\/strong><\/p>\n\n<ul>\n<li><code>api_url<\/code> \u2014 <em>(required)<\/em> The full URL to your product's content endpoint.<\/li>\n<li><code>schedule<\/code> \u2014 How often to check for new notices: <code>hourly<\/code>, <code>twicedaily<\/code>, or <code>daily<\/code> (default: <code>daily<\/code>).<\/li>\n<li><code>capability<\/code> \u2014 WordPress capability required to see notices (default: <code>manage_options<\/code>).<\/li>\n<li><code>dismiss_duration<\/code> \u2014 How long a dismissed notice stays hidden (default: <code>WEEK_IN_SECONDS<\/code>).<\/li>\n<\/ul>\n\n<p>Once initialized, the SDK automatically handles fetching, caching, displaying, and dismissing notices. No additional code is needed.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20noticepilot%20different%20from%20other%20admin%20notice%20plugins%3F\"><h3>How is NoticePilot different from other admin notice plugins?<\/h3><\/dt>\n<dd><p>Most admin notice plugins manage, dismiss, or suppress notices on a single site. NoticePilot is fundamentally different \u2014 it is a <strong>remote distribution platform<\/strong> for plugin and theme authors. You manage campaigns on a central hub, and a lightweight SDK in your plugin fetches and displays them on hundreds or thousands of remote sites. It includes campaign analytics, audience targeting, and scheduling \u2014 features that don't exist in typical notice management plugins.<\/p><\/dd>\n<dt id=\"can%20i%20use%20custom%20css%20in%20my%20campaigns%3F\"><h3>Can I use custom CSS in my campaigns?<\/h3><\/dt>\n<dd><p>Yes. Campaign content supports full HTML including inline styles, <code>&lt;style&gt;<\/code> blocks, and custom layouts. Your content renders exactly as entered on the remote site.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20allow%20raw%20html%20in%20campaigns%3F\"><h3>Is it safe to allow raw HTML in campaigns?<\/h3><\/dt>\n<dd><p>Campaign content can only be created by administrators with <code>manage_options<\/code> capability. All form submissions are protected by nonce verification. The HTML is stored raw intentionally to preserve inline CSS and styling \u2014 this is a tool for trusted plugin authors, not end-user-generated content.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20collect%20personal%20data%3F\"><h3>Does the plugin collect personal data?<\/h3><\/dt>\n<dd><p>No. Analytics events are tracked with fire-and-forget <code>sendBeacon()<\/code> calls. Remote site URLs are MD5-hashed server-side before storage. No IP addresses, usernames, cookies, or other personally identifiable information is ever collected or stored.<\/p><\/dd>\n<dt id=\"can%20i%20target%20specific%20users%20with%20a%20campaign%3F\"><h3>Can I target specific users with a campaign?<\/h3><\/dt>\n<dd><p>Yes. Each campaign supports three targeting dimensions: <strong>plan type<\/strong> (all users, free only, or pro only), <strong>plugin version<\/strong> (with operators like less than, greater than, equal), and <strong>WordPress user roles<\/strong> (administrator, editor, etc.). Leave all blank to show to everyone.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20user%20dismisses%20a%20notice%3F\"><h3>What happens when a user dismisses a notice?<\/h3><\/dt>\n<dd><p>The notice won't reappear for the configured duration. Dismissals are stored locally on the remote site in <code>wp_options<\/code> with a FIFO cleanup strategy that keeps only the 20 most recent dismissed IDs. The SDK also prunes stale IDs (campaigns removed from the hub) during each fetch cycle.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20add%20notices%20to%20the%20hub%20site%27s%20dashboard%3F\"><h3>Does this plugin add notices to the hub site's dashboard?<\/h3><\/dt>\n<dd><p>No. NoticePilot does not display any admin notices on the site where it is installed. It only provides a management dashboard under its own menu page. The SDK displays notices on <strong>remote sites<\/strong> \u2014 and only when a plugin author explicitly integrates it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Multi-product management with unlimited campaigns per product.<\/li>\n<li>Rich HTML campaign editor with full CSS and styling support.<\/li>\n<li>Campaign scheduling with automatic expiration via WP-Cron.<\/li>\n<li>Built-in analytics: impression, click, and dismissal tracking.<\/li>\n<li>Analytics dashboard with product-level and campaign-level breakdowns.<\/li>\n<li>Lightweight SDK for remote site integration with auto-fetch, caching, and dismissal handling.<\/li>\n<li>Privacy-first analytics \u2014 remote site URLs are anonymized before storage.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security: Sanitized nonce input in admin form handler.<\/li>\n<li>Security: Replaced inline <code>&lt;style&gt;<\/code> blocks in SDK with proper <code>wp_add_inline_style()<\/code> API.<\/li>\n<li>Security: Replaced inline <code>&lt;script&gt;<\/code> blocks in SDK with proper <code>wp_add_inline_script()<\/code> API.<\/li>\n<li>Tweak: Added explicit <code>__return_true<\/code> permission callback to public analytics API route to meet WP REST API guidelines.<\/li>\n<li>Tweak: Added plugin owner to contributors list.<\/li>\n<li>Tweak: Updated readme tags and description to better communicate plugin's focus on developer\/remote usage.<\/li>\n<\/ul>","raw_excerpt":"A self-hosted hub for WordPress authors to send targeted notices to unlimited sites, with built-in analytics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297409","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=297409"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alimran01"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297409"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297409"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297409"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297409"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297409"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}