Official User & Administrator Guide

Kudonics Promo Banner Builder

Detailed documentation for creating popup campaigns and static banners, responsive design, display rules, integrations, and privacy-conscious analytics.

Version 1.0.0WordPress 6.3+PHP 7.4+Tested up to WordPress 7.1GPL-2.0-or-later
Nothing found. Try a different keyword.
01 · Product overview

What the plugin does

Kudonics Promo Banner Builder creates reusable promotional campaigns without an external SaaS: design, targeting, and metrics stay in WordPress. WooCommerce, Elementor, and a third-party page builder are not required for core functionality.

01

Visual builder

Drag, resize, rotate, layers, responsive overrides, live preview, and fullscreen Quick View.

02

Two modes

An automatic popup or a static banner inserted via shortcode, Gutenberg block, or Elementor widget.

03

Local metrics

Views, clicks, closes, CTR, unique sessions, and breakdowns without an external analytics platform.

Key principleCampaign design and display behavior are configured separately. First create the content in Banner builder, then choose popup or static banner in Display rules.
02 · Compatibility

System requirements & compatibility

ComponentRequirementNotes
WordPress6.3 or newerDeclared compatibility has been tested up to 7.1.
PHP7.4 or newerUse a current PHP branch supported by your hosting provider.
JavaScriptEnabled in the browserRequired for the builder, popup triggers, countdown, and metrics tracking.
WooCommerceOptionalAdds the product element and shop/product targeting.
ElementorOptionalAdds two native widgets; core functionality works without it.
DatabaseWordPress-supported MySQL/MariaDBTwo custom tables are used for aggregated metrics and unique sessions.

For the admin area, modern versions of Chrome, Safari, Firefox, or Edge are recommended. Plugin responsive breakpoints: Desktop — 1025 px and up, Tablet — 768–1024 px, Mobile — up to 767 px.

03 · Installation

Installation & activation

Via WordPress Admin

  1. Open Plugins → Add New → Upload Plugin.
  2. Select the plugin release ZIP and click Install Now.
  3. When installation is complete, click Activate Plugin.
  4. In the left-hand menu, open Promo Builder.

Manual installation

  1. Extract the directory kudonics-promo-banner-builder.
  2. Upload it to /wp-content/plugins/ without an extra nested directory level.
  3. Activate Kudonics Promo Banner Builder on the Plugins screen.

What happens during activation

  • The capability is registered: manage_promo_banner_builder_campaigns for Administrator and, if present, Shop Manager.
  • Metrics tables are created and a daily cleanup is scheduled.
  • Eight draft starter campaigns are created once, without overwriting any later changes you make.
  • The private custom post type is registered: promobanner_campaign.
UpdatingBefore updating a production site, back up the database and files. Campaigns and metrics are stored in the database; normal deactivation does not delete them.
04 · First campaign

Quick start: a campaign in 5 steps

  1. Open Promo Builder and click Add campaign or open one of the starter drafts.
  2. Give the campaign a clear name: the format type — offer — audience/period makes searching and reporting easier.
  3. In Banner builder edit the text, CTA, colors, sizes, and positions.
  4. In Display rules choose the mode, schedule, trigger, and pages.
  5. Click Publish. For a static banner, copy the shortcode; for a popup, check Enable campaign or insert a manual trigger button.
PopupAutomatically appears on pages that match the rules, or opens manually from a button.
Static bannerIt is never inserted automatically: you must place it via shortcode/block/widget.
05 · Dashboard

Dashboard widget

The widget provides quick access to campaign creation, the campaign list, and full metrics, and also shows all-time totals.

Kudonics Promo Banner Builder widget on the WordPress Dashboard with campaign metrics
Dashboard widget: number of campaigns and published campaigns, views, clicks, closes, and CTR.

CTR is calculated as clicks ÷ views × 100. Close-button clicks are not included in clicks, so closes are reported separately.

06 · Campaign management

Campaign list & lifecycle

List of eight campaigns in WordPress Promo Builder
Campaign list with Active/Static banner statuses and the Duplicate action.
StatusWhat it meansFrontend
DraftThe campaign is being edited but is not available to visitors.It is not rendered by shortcode, block, widget, or automatically.
Published + ActiveThe popup is published and Enable campaign is turned on.It can open automatically and manually.
Published + Static bannerStatic mode.Rendered only at a manual placement point.
Disabled popupPublished, but Enable campaign is turned off.It does not open even from a manual trigger.

Duplicate

The Duplicate action creates an exact copy of post data, design/display meta, and taxonomies. The name gets a “Copy” suffix, and the status is inherited — after duplicating, check that the copy has not become active at the same time as the original.

Safe workflowFor major changes, first duplicate the campaign, move the copy to Draft, test it, then publish it and disable the old version.
07 · Starter library

Eight starter templates

Templates are created as Drafts and serve as fully editable examples. They do not appear on the frontend until you publish them and configure placement/rules.

Static banners

Popups

Why templates use Show on: Do not show anywhereThis prevents accidental automatic display. Popup templates can already be opened with a manual trigger after Publish; automatic targeting must be enabled intentionally.
08 · Visual editor

Visual builder: workspace structure

Visual builder with elements panel and live preview
Elements/settings are on the left; live preview with the responsive toolbar is on the right.

Elements

Content for each element, remove controls, and the Add new element button.

Layers

Layering order from front to back with drag reorder and quick commands.

Wrapper

Size, background, border, alignment, or popup position/backdrop.

Working on the canvas

  • Clicking an element selects it and opens the corresponding style panel.
  • Drag changes position; resize handles change size; the rotate handle changes the angle.
  • Changes appear in the preview immediately, but are written to the database only after Save/Update/Publish.
  • The arrow button collapses the tools panel, freeing more space for the canvas.
  • Fullscreen mode opens Quick View with tools, theme toggle, and a large canvas.
Fullscreen Quick View visual builder
Quick View is useful for precise composition of large banners and for checking contrast against a different background.

Layers & keyboard commands

CommandThe
Drag layerChange the z-order.
Bring to front / Send to backMove to the edge of the stack.
Bring forward / Send backwardMove by one level.
Ctrl/Cmd + ] / Ctrl/Cmd + [Forward / backward.
Add ShiftImmediately to front / back.
09 · Content blocks

Element types

Add element modal with available element types
Core library without WooCommerce: Text input, Textarea, Shortcode, Button, Image, Countdown timer, and Shape.
ElementPurposeMain settings
Text inputSingle-line label, eyebrow, heading, or code.Color, size, weight, italic, alignment.
TextareaMulti-line rich text.Bold, italic, underline, strike, lists, color, link, clear formatting.
ShortcodeThird-party output inside the banner.Shortcode content + entrance animation. Promo shortcodes from this plugin cannot be nested.
ButtonCTA link.URL picker, new tab, normal/hover color/gradient, padding, radius, transition.
ImageMedia Library image.Width, height, keep proportions, alternative text.
CountdownTimer to an end date with an optional start date.Labels, title, digit/label/card styles, animation: none/fade/slide/flip.
ShapeDecoration, badge, plate, arrow.Size, fill, border, opacity, rotation.
ProductSimple purchasable WooCommerce product.Title/image/price/add-to-cart parts and separate product card styles.

Shape library

Plugin geometric shape library
12 built-in SVG shapes: square, rectangle, rounded rectangle, circle, ellipse, triangle, diamond, pentagon, hexagon, octagon, star, and right arrow.

Rich text sanitization

Textarea allows limited safe HTML: strong, b, em, i, u, s, strike, br, p, div, ul, ol, li, span with hex color and a[href]. This means arbitrary scripts/styles are not saved.

Shortcode elementInsert only shortcodes from trusted plugins. Preview executes the shortcode in the admin area. Nesting [promo_banner] or [promo_popup_button] is blocked, as is excessive recursion.
10 · Styling

Styles, transform & entrance animations

Wrapper

Supported width units are px, % or vw; height units are px or vh; transparent/solid/linear-gradient backgrounds; background image with size/repeat/position; border radius, width, style, and color. Static banners support left/center/right alignment; popups support 9 positions from center to corners and an optional dark backdrop.

Transform

ParameterRangeBest practice
Scale X/Y0.1–10For product elements, proportional scaling is preserved.
Rotation−360°…360°Moderate angles are easier to read on mobile.
Entrance duration100–5000 msTypically 300–700 ms.
Entrance delay0–10000 msUse this for a staggered sequence.
Custom move X/Y−1000…1100Starting point for custom movement.
Start opacity0–100%Combine with movement for a softer entrance.

Animation presets

None Fade in Slide up Slide down Slide from left Slide from right Zoom in Pop Soft bounce Custom movement

Easing: ease-out, ease-in-out, linear, spring. Repeat: once, twice, or loop. Do not use loop on large text blocks — it hurts readability and distracts from the CTA.

11 · Responsive design

Desktop, Tablet & Mobile

Desktop is the base design. Tablet and Mobile store only overrides, so unchanged values are inherited.

Mobile responsive preview in the visual builder
Mobile preview shows separate position/style overrides and the actual scale in the workspace.
ModeViewportWhat can be overridden
Desktop1025 px+Full base configuration.
Tablet768–1024 pxWrapper, positions, element styles, visibility.
Mobileup to 767 pxWrapper, positions, element styles, visibility.

Recommended workflow

  1. Finish the composition on Desktop.
  2. Switch to Tablet and adjust width, headline size, and overflow.
  3. Switch to Mobile, increase tap targets, and check height, the close button, and the CTA.
  4. Use Hide on Desktop/Tablet/Mobile only for secondary decoration, not critical information.
  5. Check the actual page, not only the scaled preview.
InheritanceChanging a Desktop value affects Tablet/Mobile if no override exists there. Markers next to the device buttons help show where custom styles are present.
12 · Targeting & scheduling

Display rules

Full Display rules panel for a popup campaign
Popup mode: manual shortcode button styles, delay, scroll trigger, schedule, priority, page targeting, and dismissal reset.

Campaign mode

Static banner ads ON disables popup Enable campaign and displays the banner shortcode. Static banner ads OFF creates a popup; for manual trigger/automatic display rendering, Enable campaign.

Trigger logic

ParameterValueBehavior
Show after0–60 secondsMinimum delay after page load.
At the beginningstartThe scroll condition is satisfied immediately.
In the middlemiddleThe visitor must reach approximately the middle of the page.
Near the bottomnear_bottomDisplays closer to the bottom of the page.

If both a delay and scroll trigger are set, the popup opens only after both conditions are met. A manual trigger ignores the automatic page rule and delay, but it does not ignore Publish/Enable or the schedule.

Schedule

Start/End are entered in the site timezone from Settings → General, stored in UTC, and converted back when editing. An empty Start means “active immediately”; an empty End means “no end limit”.

Priority

Range: 0–100. Higher priority is sorted first; when priority is equal, the lower campaign ID comes first. Priority determines the order of automatically eligible popups, but does not replace page/schedule checks.

Show on

RuleMatches
All pagesAny frontend request.
Blog pagesPosts index, single posts, categories, tags.
Specific pagesOnly the selected WordPress Pages.
WooCommerce shop pagesShop, product category, and product tag archives.
WooCommerce product pagesSingle product.
Do not show anywhereThe automatic popup is not shown; manual trigger remains available.

Reset popup display

A closed popup stays hidden until the end of the current browser session. Reset clears dismissal only for the current browser and this campaign; other visitors are unaffected. After reset, reload the frontend page.

13 · Manual placement

Shortcodes & manual placement

Static banner

[promo_banner id="123"]

Campaign 123 must be Published, in Static banner mode, and within its schedule. Page targeting does not apply to static banners: placement is determined by the shortcode itself.

Popup trigger button

[promo_popup_button id="123" text="Open offer"]

Supported attributes are id, text and class. Enclosed content takes priority over text:

[promo_popup_button id="123" class="my-offer-button"]Get discount[/promo_popup_button]

Where you can insert it

  • Shortcode block in Gutenberg.
  • Classic Editor content.
  • Text/Custom HTML/Block widgets.
  • A page builder element that executes WordPress shortcodes.
  • A PHP theme template through the standard do_shortcode() — only in custom development.
Four static starter banners on the WordPress frontend
Actual frontend rendering of four static starter banners.
New Year Celebration popup open on the frontend
A manual trigger opens the popup with a backdrop, focusable dialog, and close button.
14 · Editor integrations

Gutenberg & Elementor

Gutenberg blocks

BlockNamespaceAttributes
Static promo bannerpromo-banner-builder/static-bannercampaignId (number)
Promo popup buttonpromo-banner-builder/popup-buttoncampaignId, buttonText; align left/center/right
  1. In the block editor, click Add block.
  2. Search for “promo” or the plugin name.
  3. Select a published campaign in Inspector controls.
  4. For the popup button, set the label and alignment.
  5. Check the frontend: the blocks are dynamic and use the same renderer as the shortcodes.

Elementor

After Elementor is activated, the category Kudonics Promo Banner Builder appears with the widgets Static Promo Banner and Promo Popup Button. They select a campaign from the list of published-compatible campaigns; the popup widget also has Button Text.

Empty placeholderIf there is no suitable published campaign, Elementor shows an admin placeholder and a Manage banners link. On the frontend, an invalid widget does not output an empty decorative wrapper.

Asset loading

Frontend CSS/JS loads only when there is a matching automatic campaign, shortcode/block/widget placement, or preview context. A theme/renderer can explicitly declare placement through the filter described in Developer reference.

15 · Commerce

WooCommerce integration

WooCommerce is optional. Without it, the plugin continues to work, and the builder shows an informational note instead of product controls.

Product element

Search returns up to 20 published simple products that are purchasable and in stock. You can add title, image, price, and an AJAX add-to-cart button together or selectively.

Product styles

Card width/padding/radius/background, text/title/price colors and sizes, image width, button background/color/font size/radius/padding. Product scale remains proportional.

Targeting

  • Shop pages: shop archive, product categories, and product tags.
  • Product pages: only single product.
  • If a WooCommerce rule is saved and WooCommerce is deactivated, the rule will not match until WooCommerce is active again.
Cart scriptswc-add-to-cart and wc-cart-fragments are enqueued only when a renderable campaign actually contains a product element.
16 · First-party analytics

Metrics & reports

Metrics are stored locally in the WordPress database. Overview supports 7/30/90 days or All time, search, CSV export, print, and dark mode.

Summary cards on the Metrics screen
Overview summary: campaigns, published, views, clicks, and CTR.
Metrics table with the campaign list
The table shows type/status/performance and links to the detailed report.

Events

EventWhen it is recordedDefault rate limit
ViewThe campaign enters the viewport.10 s per session/event/campaign/day.
ClickA click on a tracked campaign element; the close button is excluded.1 s.
CloseA click on the popup close button.10 s.

Detail report

An individual campaign shows views, unique sessions, clicks, CTR, closes, close rate, daily activity, and breakdowns: clicks by element, devices, browsers, countries, pages, referrers, languages, and time zones.

How to read the metrics

  • CTR = clicks / views. A low CTR may indicate a weak CTA or incorrect targeting.
  • Close rate = closes / views. Review a high value together with delay and page relevance.
  • Unique sessions — privacy-safe sessions, not people or lifetime unique users.
  • Clicks by element help compare multiple CTAs within a single banner.

Data management

Metrics retention and uninstall data settings
Retention: 30/90/180/365/730 days or indefinitely; uninstall deletion is disabled by default.
Clear all metricsThis operation permanently deletes views, clicks, closes, and unique-session records, but not campaigns. Export CSV before clearing if the data is needed for reporting.
17 · Data governance

Privacy, retention & data deletion

What may be stored

Event type, campaign, element ID/type, placement, device category, browser family, page ID/path, referring host, browser language, browser time zone, and country code — only if the hosting/CDN provides it through a supported header.

What is not stored

  • Raw IP address.
  • Full referrer URL — only the host is stored.
  • External analytics identifier.
  • User contact details.
  • Raw browser session ID: an HMAC SHA-256 salted non-reversible hash is stored.

Data-volume safeguards

By default, a maximum of 5,000 new dimension rows per campaign/day and 50,000 unique sessions per campaign/event/day are allowed. Identical dimensions are aggregated into a counter row. Limits and rate intervals can be changed with filters.

Retention

Default — 365 days. Daily WP-Cron cleanup deletes old rows. Available values are 30, 90, 180, 365, 730 days, or indefinitely. If WP-Cron is disabled, configure a server cron to run WordPress cron regularly.

Uninstall

By default, campaigns, metrics, and settings remain after uninstall. To delete everything, first enable “Delete all campaigns, metrics, and plugin settings when the plugin is uninstalled”, save the setting, and only then delete the plugin.

Privacy policyThe plugin adds suggested text to the WordPress Privacy Policy Guide. The site owner is still responsible for disclosure, legal basis, retention, and consent according to applicable law and configuration.
18 · Inclusive UX

Accessibility recommendations

  • Popup markup uses dialog semantics, aria-modal, the campaign title as the label, and manages aria-expanded on the trigger.
  • A static banner has a region role and an accessible campaign label.
  • Add meaningful Alternative text to images; leave alt empty for decorative images.
  • The CTA should describe the result: “Get −20%”, not “Click here”.
  • Check contrast for normal/hover states and visible focus.
  • Do not hide critical legal/offer content through device visibility.
  • Plugin CSS respects prefers-reduced-motionby disabling transition duration for relevant elements.
  • The close button should be visible, high-contrast, and large enough on Mobile.
Keyboard QANavigate the page using only Tab/Shift+Tab, open the popup with Enter/Space, close it with Escape, and verify that focus returns to the trigger.
19 · Administration

Roles, permissions & security

Managing campaign UI and metrics requires manage_promo_banner_builder_campaigns. The capability is automatically added to the roles administrator and shop_manager. For a custom role, assign the capability through a role-management plugin or code.

  • Campaign saves, AJAX searches, shortcode preview, duplication, and metrics actions check the capability.
  • State-changing admin requests are protected by WordPress nonces.
  • Design/display values go through type checks, allowlists, bounds, and sanitization.
  • Shape SVG is selected only from the plugin-owned library; arbitrary SVG markup is not accepted.
  • Frontend metric requests validate the nonce, published campaign, event allowlist, and session format.
  • Links opened in a new tab receive noopener noreferrer.
Least privilegeShop Manager receives full campaign management access. If that does not match your workflow, remove the capability from this role using your own role-management solution.
20 · Diagnostics

Troubleshooting

Popup does not appear automatically
Check: campaign Published; Static banner ads OFF; Enable campaign ON; current date inside schedule; Show on matches the current page; delay and scroll condition are satisfied; the popup has not been closed in this browser session. Click Reset popup display, clear the page/CDN cache, and reload the frontend.
Manual popup button is not displayed
The ID must point to a Published popup with Enable campaign ON. The campaign must not be a Static banner and must be within its schedule. Page targeting and delay are not required for a manual button.
Static shortcode returns empty output
Make sure the ID exists, the campaign is Published, Static banner ads is ON, the design is saved, and the schedule is active. Automatic Enable campaign is not used for static mode.
Design is clipped on Mobile
Switch to Mobile preview: reduce wrapper width/height, headline size, and shape/image sizes; reposition elements; hide secondary decoration. Then test the actual viewport up to 767 px.
Metrics are not increasing
Check JavaScript errors, script caching/optimization, blocking of admin-ajax.php, consent tooling, and rate limits. Repeated views from the same session within 10 s intentionally do not increase the counter.
Country is empty
This is expected if the hosting/CDN does not provide CF-IPCountry, X-Vercel-IP-Country or GEOIP_COUNTRY_CODE. The plugin does not determine the country from the raw IP.
WooCommerce options are missing
Activate WooCommerce. The Product element requires a published, simple, purchasable, in-stock product. Variable/external/out-of-stock products are not included in builder search.
Changes are visible in the builder but not on the site
Click Update/Publish, verify the correct campaign ID, and clear page cache, object cache, CDN, and CSS/JS optimization cache. Make sure the frontend is not showing another duplicate campaign with higher priority.
21 · FAQ

Frequently asked questions

Is WooCommerce required?
No. It only adds product elements and shop/product targeting.
Is Elementor required?
No. Shortcodes and Gutenberg blocks work without Elementor.
Which timezone is used?
The site timezone from Settings → General. Schedule is stored in UTC; countdown also receives the site date/time context.
Can I show multiple static banners on one page?
Yes. Insert multiple shortcodes/blocks/widgets with different published static campaign IDs.
Can I have multiple popup campaigns?
Yes. Automatic matches are sorted by priority; manual triggers can address a specific popup.
Why does a starter popup not open automatically?
Starter templates use Show on: Do not show anywhere. Change the rule or use a manual trigger after Publish.
Does data disappear after Deactivate?
No. Deactivation only removes the scheduled cleanup hook; activation restores it.
Does data disappear after Uninstall?
Not by default. Full deletion happens only after explicit opt-in in Metrics → Data management.
22 · Technical reference

Developer reference

Storage identifiers

TypeIdentifier
Post typepromobanner_campaign
Design meta_promo_banner_builder_design
Display meta_promo_banner_builder_display
Capabilitymanage_promo_banner_builder_campaigns
Metrics table{$wpdb->prefix}promo_banner_builder_metrics
Unique sessions table{$wpdb->prefix}promo_banner_builder_unique_sessions
Cleanup hookpromo_banner_builder_prune_metrics

Filters

FilterPurposeDefault
promo_banner_builder_should_enqueue_frontend_assetsNotify the plugin about a custom/manual renderer so frontend assets are enqueued.Detected boolean
promo_banner_builder_daily_dimension_limitMax aggregate dimension rows per campaign/day.5000
promo_banner_builder_metric_rate_limit_secondsInterval between identical session events.view 10, click 1, close 10
promo_banner_builder_daily_unique_limitMax unique sessions per campaign/event/day.50000
promo_banner_builder_country_headersAllowlisted headers for the ISO country code.Cloudflare, Vercel, GeoIP headers

Custom asset detection example

add_filter(
    'promo_banner_builder_should_enqueue_frontend_assets',
    function ( $should_enqueue ) {
        return $should_enqueue || is_page_template( 'templates/promo-landing.php' );
    }
);

Rendering API

For integration code, you can get the singleton through \PromoBannerBuilder\Plugin::instance() and use public render methods. In most cases, using a shortcode/block is safer because they also register the required assets and popup footer markup.

Do not edit serialized meta directlyThe builder schema normalizes data, migrates legacy IDs, and sanitizes nested values. Use the UI or public WordPress flows; after a custom import, always test all breakpoints.

Performance notes

  • The campaign query runs once per request and is cached in instance properties.
  • Frontend assets are not enqueued without matching/manual placement.
  • Metrics use aggregate dimensions with a unique key and upsert counter.
  • Product cart fragments are enqueued only when an actual product element is present.
  • Images receive decoding="async"; file optimization remains the responsibility of the Media Library/CDN.
23 · Go-live

Production checklist

Content & design

  • The campaign name is clear in reports.
  • The offer, CTA, and landing URL have been verified.
  • Alt text and contrast are correct.
  • Desktop/Tablet/Mobile have been checked.
  • Hover/focus/close states work.

Delivery & data

  • Publish/Enable/mode are correct.
  • Timezone and schedule have been checked.
  • Page targeting and priority are as expected.
  • Cache has been cleared.
  • View/click/close events are visible in Metrics.

Recommended acceptance test

  1. Open the page in an incognito session.
  2. Test the delay + scroll trigger and confirm that only one expected popup appears.
  3. Follow the CTA and verify the URL/new tab behavior.
  4. Close the popup and confirm that it does not reopen during the same session.
  5. Repeat on a mobile viewport and with keyboard navigation.
  6. Open Metrics after the events have been processed and verify attribution.
24 · Glossary

Glossary

TermValue
CampaignAn individual WordPress record that combines design and display configuration.
WrapperThe outer banner container: size, background, border, alignment/position.
ElementText, button, image, shape, shortcode, countdown, or product inside the wrapper.
LayerA z-order level; front overlaps back.
Static bannerA campaign rendered only at a manual placement point.
Automatic popupA popup that matches page/schedule rules and opens after trigger conditions are met.
Manual triggerA button shortcode/block/widget that opens a specific popup.
CTRClicks ÷ views × 100%.
Unique sessionAn anonymous browser session represented by a salted hash.
OverrideA Tablet/Mobile value that replaces the inherited Desktop value.
Documentation generated from the actual v1.0.0 implementationScreenshots were captured in an isolated WordPress 7.1 / PHP 8.2 test environment using the current plugin version.