{"id":297409,"date":"2026-05-12T12:27:01","date_gmt":"2026-05-12T12:27:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/noticepilot\/"},"modified":"2026-06-04T09:15:00","modified_gmt":"2026-06-04T09:15:00","slug":"noticepilot","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/noticepilot\/","author":20355371,"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-06-04 09:15:00","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":157,"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-06-04 09:15:00"}},"upgrade_notice":{"1.0.1":"<p>This release includes important security hardening for the admin form handler and the remote SDK. All users are encouraged to upgrade.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3549159,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-01.png":{"filename":"screenshot-01.png","revision":3556777,"resolution":"1","location":"assets","locale":"","width":1189,"height":721},"screenshot-02.png":{"filename":"screenshot-02.png","revision":3556777,"resolution":"2","location":"assets","locale":"","width":1369,"height":737},"screenshot-03.png":{"filename":"screenshot-03.png","revision":3556777,"resolution":"3","location":"assets","locale":"","width":918,"height":944},"screenshot-04.png":{"filename":"screenshot-04.png","revision":3556777,"resolution":"4","location":"assets","locale":"","width":810,"height":930}},"screenshots":{"1":"<strong>NoticePilot Dashboard<\/strong> \u2013 Centralized hub to manage products, launch campaigns, and configure SDK integrations.","2":"<strong>Campaign Analytics<\/strong> \u2013 Track performance, impressions, clicks, and conversion rates across all remote installations.","3":"<strong>SDK Integration<\/strong> \u2013 Simple, step-by-step guide to download and initialize the remote notice client SDK.","4":"<strong>Add Campaign<\/strong> \u2013 Create HTML campaigns with customized start dates, end dates, and targeting rules."}},"plugin_section":[],"plugin_tags":[26308,262668,4932,262667,262666],"plugin_category":[],"plugin_contributors":[226713,252241,209471],"plugin_business_model":[],"class_list":["post-297409","plugin","type-plugin","status-publish","hentry","plugin_tags-admin-notices","plugin_tags-campaign-analytics","plugin_tags-developer-tools","plugin_tags-plugin-sdk","plugin_tags-remote-notices","plugin_contributors-alimran01","plugin_contributors-muaz404","plugin_contributors-spiderdevs","plugin_committers-alimran01","plugin_committers-spiderdevs","plugin_support_reps-spiderdevs"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/noticepilot\/assets\/icon-256x256.png?rev=3549159","icon_2x":"https:\/\/ps.w.org\/noticepilot\/assets\/icon-256x256.png?rev=3549159","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/noticepilot\/assets\/screenshot-01.png?rev=3556777","caption":"<strong>NoticePilot Dashboard<\/strong> \u2013 Centralized hub to manage products, launch campaigns, and configure SDK integrations."},{"src":"https:\/\/ps.w.org\/noticepilot\/assets\/screenshot-02.png?rev=3556777","caption":"<strong>Campaign Analytics<\/strong> \u2013 Track performance, impressions, clicks, and conversion rates across all remote installations."},{"src":"https:\/\/ps.w.org\/noticepilot\/assets\/screenshot-03.png?rev=3556777","caption":"<strong>SDK Integration<\/strong> \u2013 Simple, step-by-step guide to download and initialize the remote notice client SDK."},{"src":"https:\/\/ps.w.org\/noticepilot\/assets\/screenshot-04.png?rev=3556777","caption":"<strong>Add Campaign<\/strong> \u2013 Create HTML campaigns with customized start dates, end dates, and targeting rules."}],"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 maintain a WordPress plugin or theme that runs 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 centrally on your own site, and a lightweight PHP SDK bundled in your plugin automatically fetches and displays them on every remote installation.<\/p>\n\n<h4>Who Is This For?<\/h4>\n\n<p>NoticePilot is purpose-built for <strong>WordPress plugin and theme developers<\/strong> who need to communicate with their users across multiple remote installations from a single, self-hosted dashboard. It is <strong>not<\/strong> a tool for managing or suppressing admin notices on a single site \u2014 there are many plugins already serving that purpose.<\/p>\n\n<h4>What Makes It Different?<\/h4>\n\n<p>Unlike most admin-notice plugins, NoticePilot is a complete developer communication platform:<\/p>\n\n<ul>\n<li><strong>Hub-to-Remote Architecture<\/strong> \u2014 One central dashboard pushes campaigns to unlimited remote WordPress sites via a REST API. No third-party SaaS, no external dependencies \u2014 everything runs on your own WordPress installation.<\/li>\n<li><strong>Single-File PHP SDK<\/strong> \u2014 Bundle one PHP file into your plugin or theme. Initialize with a single line of code. The SDK handles fetching, caching, rendering, and dismissal automatically.<\/li>\n<li><strong>Privacy-First Analytics<\/strong> \u2014 Track impressions, clicks, and dismissals across all remote sites without collecting personal data. Remote site URLs are MD5-hashed before storage \u2014 no IP addresses, usernames, or cookies are ever saved.<\/li>\n<li><strong>Audience Targeting<\/strong> \u2014 Deliver the right message to the right users by targeting campaigns based on plan type (free or pro), plugin version (with comparison operators like <code>&lt;<\/code>, <code>&gt;<\/code>, <code>=<\/code>), and WordPress user roles.<\/li>\n<li><strong>Campaign Scheduling<\/strong> \u2014 Set start and end dates for time-sensitive campaigns. Expired campaigns are auto-disabled via WP-Cron \u2014 no manual clean-up required.<\/li>\n<li><strong>Rich HTML Support<\/strong> \u2014 Write full HTML including inline CSS, <code>&lt;style&gt;<\/code> blocks, and custom layouts. Your content renders exactly as authored on every remote site.<\/li>\n<li><strong>Smart Dismissal Handling<\/strong> \u2014 Users who dismiss a notice won't see it again for a configurable duration. Dismissals are stored locally on the remote site using a FIFO strategy, keeping only the 20 most recent dismissed IDs.<\/li>\n<li><strong>Scalable Analytics Engine<\/strong> \u2014 Raw events roll up into daily summaries via an hourly WP-Cron job with automatic pruning. Built for scale \u2014 no 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 automatically.<\/li>\n<li><strong>Add Campaigns<\/strong> \u2014 Write rich HTML content, set optional scheduling and audience-targeting rules, then enable the campaign.<\/li>\n<li><strong>Integrate the SDK<\/strong> \u2014 Download the single-file PHP SDK from your product card, bundle it with your plugin or theme, and initialize it with one line of code. The SDK polls your hub on a configurable schedule and renders active campaigns as WordPress 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 by 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 all users of your plugin \u2014 without shipping a new release.<\/li>\n<li><strong>Theme authors:<\/strong> Announce seasonal sales, new theme versions, or compatibility updates directly inside the WordPress admin on every active installation.<\/li>\n<li><strong>Agency developers:<\/strong> Broadcast maintenance windows, policy changes, or onboarding tips across all client sites from a single central hub.<\/li>\n<li><strong>Freemium plugins:<\/strong> Show upgrade prompts exclusively to free-plan users while displaying different messaging to pro users \u2014 all without code changes on the remote site.<\/li>\n<\/ul>\n\n<h4>A Self-Hosted Alternative<\/h4>\n\n<p>Plugin authors today face a difficult choice: build a custom notice system from scratch for every product (duplicating effort), or rely on third-party SaaS platforms (adding external dependencies and data-privacy concerns). NoticePilot offers a <strong>self-hosted, privacy-respecting, zero-external-dependency alternative<\/strong> that runs entirely on your own WordPress installation \u2014 giving you full control over your data and your users' experience.<\/p>\n\n<!--section=installation-->\n<h4>Installing the Hub Plugin<\/h4>\n\n<ol>\n<li>Upload the <code>noticepilot<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory of your <strong>central management site<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>NoticePilot<\/strong> in your WordPress admin sidebar to begin creating products and campaigns.<\/li>\n<\/ol>\n\n<h4>Integrating the SDK With Your Plugin or Theme<\/h4>\n\n<p>Once you have created a product and added campaigns on your hub site, integrate the SDK into your own plugin or theme to start displaying notices on remote sites:<\/p>\n\n<ol>\n<li>In the NoticePilot dashboard, click the <strong>How To Integrate<\/strong> button on your product card.<\/li>\n<li>Click <strong>Download SDK<\/strong> to download the <code>class-remote-notice-client.php<\/code> file.<\/li>\n<li>Copy the file into your plugin or theme (e.g., into an <code>includes\/<\/code> subdirectory).<\/li>\n<li><p>Add the following initialization code to your plugin's main file or your theme's <code>functions.php<\/code>:<\/p>\n\n<p>\/\/ Load 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 slug shown on your NoticePilot product card, and <code>your-hub-site.com<\/code> with the domain of the site running the NoticePilot hub plugin.<\/p>\n\n<p><strong>SDK configuration options:<\/strong><\/p>\n\n<ul>\n<li><code>api_url<\/code> \u2014 <em>(Required)<\/em> The full REST API URL to your product's content endpoint.<\/li>\n<li><code>schedule<\/code> \u2014 How often the SDK checks for new campaigns. Accepted values: <code>hourly<\/code>, <code>twicedaily<\/code>, or <code>daily<\/code>. Default: <code>daily<\/code>.<\/li>\n<li><code>capability<\/code> \u2014 The WordPress capability a user must have to see notices. Default: <code>manage_options<\/code>.<\/li>\n<li><code>dismiss_duration<\/code> \u2014 How long a dismissed notice remains hidden before it can reappear. Default: <code>WEEK_IN_SECONDS<\/code>.<\/li>\n<\/ul>\n\n<p>Once initialized, the SDK automatically handles fetching, caching, rendering, and dismissing notices \u2014 no additional code required.<\/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 WordPress installation. NoticePilot serves an entirely different purpose \u2014 it is a <strong>remote campaign distribution platform<\/strong> for plugin and theme authors. You create and manage campaigns on a central hub site, and a lightweight SDK embedded in your plugin automatically fetches and displays those campaigns across hundreds or thousands of remote installations. It also includes campaign analytics, audience targeting, and scheduling \u2014 capabilities not found in typical notice-management plugins.<\/p><\/dd>\n<dt id=\"can%20i%20use%20custom%20html%20and%20css%20in%20my%20campaigns%3F\"><h3>Can I use custom HTML and 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 written on every remote site.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20store%20and%20serve%20raw%20html%20campaign%20content%3F\"><h3>Is it safe to store and serve raw HTML campaign content?<\/h3><\/dt>\n<dd><p>Yes, within its intended use case. Campaign content can only be created by administrators who have the <code>manage_options<\/code> capability, and all form submissions are protected by WordPress nonce verification. HTML is stored without additional sanitization intentionally, to preserve inline CSS and custom styling. NoticePilot is a developer tool designed for trusted authors \u2014 not for end-user-generated content.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20collect%20personal%20data%20from%20remote%20sites%3F\"><h3>Does the plugin collect personal data from remote sites?<\/h3><\/dt>\n<dd><p>No. Analytics events are recorded using fire-and-forget <code>navigator.sendBeacon()<\/code> calls. Before any data is written to the database, remote site URLs are MD5-hashed server-side. No IP addresses, usernames, cookies, user agents, or other personally identifiable information is ever collected or stored.<\/p><\/dd>\n<dt id=\"can%20i%20target%20campaigns%20to%20specific%20users%20or%20plan%20types%3F\"><h3>Can I target campaigns to specific users or plan types?<\/h3><\/dt>\n<dd><p>Yes. Each campaign supports three independent targeting dimensions:<\/p>\n\n<ul>\n<li><strong>Plan type<\/strong> \u2014 Show to all users, free-plan users only, or pro-plan users only.<\/li>\n<li><strong>Plugin version<\/strong> \u2014 Target by version number using comparison operators (<code>&lt;<\/code>, <code>&gt;<\/code>, <code>=<\/code>, <code>&lt;=<\/code>, <code>&gt;=<\/code>).<\/li>\n<li><strong>WordPress user role<\/strong> \u2014 Restrict visibility to specific roles such as Administrator, Editor, and others.<\/li>\n<\/ul>\n\n<p>Leave all targeting fields blank to display the campaign to every eligible user.<\/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 is hidden for the duration configured via the <code>dismiss_duration<\/code> SDK option. Dismissals are recorded locally on the remote site in <code>wp_options<\/code> using a FIFO cleanup strategy that retains only the 20 most recent dismissed campaign IDs. During each fetch cycle, the SDK also automatically prunes stale IDs for campaigns that no longer exist on the hub.<\/p><\/dd>\n<dt id=\"does%20installing%20noticepilot%20add%20notices%20to%20my%20own%20site%27s%20dashboard%3F\"><h3>Does installing NoticePilot add notices to my own site's dashboard?<\/h3><\/dt>\n<dd><p>No. NoticePilot does not inject any admin notices into the WordPress dashboard of the site where it is installed. It provides only a management interface under its own admin menu page. Campaign notices are displayed exclusively on <strong>remote sites<\/strong> \u2014 and only when a plugin or theme author explicitly integrates the SDK.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li><strong>Security:<\/strong> Sanitized nonce input in the admin form handler.<\/li>\n<li><strong>Security:<\/strong> Replaced inline <code>&lt;style&gt;<\/code> output in the SDK with the proper <code>wp_add_inline_style()<\/code> API.<\/li>\n<li><strong>Security:<\/strong> Replaced inline <code>&lt;script&gt;<\/code> output in the SDK with the proper <code>wp_add_inline_script()<\/code> API.<\/li>\n<li><strong>Improvement:<\/strong> Added an explicit <code>__return_true<\/code> permission callback to the public analytics REST API route to comply with WP REST API guidelines.<\/li>\n<li><strong>Improvement:<\/strong> Added plugin owner to the contributors list.<\/li>\n<li><strong>Improvement:<\/strong> Updated readme tags and short description to better reflect the plugin's developer-focused, remote-distribution use case.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Multi-product management with support for unlimited campaigns per product.<\/li>\n<li>Rich HTML campaign editor with full CSS and custom layout support.<\/li>\n<li>Campaign scheduling with automatic expiration handling via WP-Cron.<\/li>\n<li>Built-in analytics tracking for impressions, clicks, and dismissals.<\/li>\n<li>Analytics dashboard with both product-level and campaign-level breakdowns.<\/li>\n<li>Lightweight single-file PHP SDK for remote site integration, with auto-fetch, transient caching, and dismissal handling.<\/li>\n<li>Privacy-first analytics \u2014 remote site URLs are MD5-hashed before storage; no personal data is collected.<\/li>\n<\/ul>","raw_excerpt":"Self-hosted remote notice distribution for WordPress plugin and theme authors. Push campaigns to unlimited sites via a lightweight PHP SDK \u2014 no SaaS r &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297409"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/spiderdevs"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297409"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297409"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297409"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297409"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297409"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}