{"id":370763,"date":"2026-09-20T14:34:47","date_gmt":"2026-09-20T14:34:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/calendora-banners\/"},"modified":"2026-09-20T14:34:19","modified_gmt":"2026-09-20T14:34:19","slug":"calendora-banners","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/calendora-banners\/","author":23546248,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.4","stable_tag":"1.6.4","tested":"7.1.2","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"Calendora Banners","header_author":"Golden Pixel","header_description":"Schedule seasonal and evergreen promotional banners, with a local name-day calendar, a shortcode and an optional Elementor widget.","assets_banners_color":"d8dfda","last_updated":"2026-09-20 14:34:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.goldenpixel.pl\/calendora-banners\/","header_author_uri":"https:\/\/www.goldenpixel.pl\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":69,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.6.4":{"tag":"1.6.4","author":"goldenpixel","date":"2026-09-20 14:34:19","revision":3704343}},"upgrade_notice":{"1.6.4":"<p>Technical release for WordPress.org compliance. BREAKING: all shortcodes are renamed. Replace [smart_campaigns] with [caleba_banners] and the [scp_<em><em>names] shortcodes with their [caleba<\/em><\/em>] equivalents. Stored data migrates automatically on the first admin page load; back up before updating.<\/p>","1.6.3":"<p>Fixes the toggle switches in the settings screens: when turned on, the knob jumped upwards and stuck out above the switch. Off state was already correct. The switch now looks identical in both states apart from its colour and the knob position.<\/p>","1.6.2":"<p>Makes &quot;Use theme colors for navigation&quot; actually work: in that mode the plugin no longer sets any colours on the arrows, pause control or dots, so your theme styles them. Also fixes toggle alignment and spacing below the Save settings button.<\/p>","1.6.1":"<p>Fixes slider arrows and the pause control picking up your theme&#039;s colours. Navigation now uses its own neutral styling; a new setting lets you opt back into theme colours. Also improves spacing in Test Mode and Name days.<\/p>","1.6.0":"<p>Security release: CTA links and imported JSON are now validated, and request data is unslashed correctly. Renamed to Calendora Banners, but the shortcode, post type and your campaigns are unchanged. Uninstalling keeps your data unless you opt in.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3704347,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3704347,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3704347,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3704347,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3704347,"resolution":"1","location":"assets","locale":"","width":1586,"height":992},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3704347,"resolution":"2","location":"assets","locale":"","width":1586,"height":992},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3704347,"resolution":"3","location":"assets","locale":"","width":1586,"height":992},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3704347,"resolution":"4","location":"assets","locale":"","width":1586,"height":992},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3704347,"resolution":"5","location":"assets","locale":"","width":1586,"height":992},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3704347,"resolution":"6","location":"assets","locale":"","width":1586,"height":992}},"screenshots":{"1":"The dashboard, showing what is on air right now and what comes next.","2":"The campaign editor with content, schedule, images and per-campaign typography.","3":"The campaign calendar for the coming weeks.","4":"The name-day calendar with per-day overrides.","5":"The evergreen screen with drag-and-drop ordering and on-air indicators."}},"plugin_section":[],"plugin_tags":[2608,7644,76538,4685,13423],"plugin_category":[],"plugin_contributors":[275199],"plugin_business_model":[],"class_list":["post-370763","plugin","type-plugin","status-publish","hentry","plugin_tags-banners","plugin_tags-campaigns","plugin_tags-elementor","plugin_tags-scheduler","plugin_tags-seasonal","plugin_contributors-goldenpixel","plugin_committers-goldenpixel"],"banners":{"banner":"https:\/\/ps.w.org\/calendora-banners\/assets\/banner-772x250.png?rev=3704347","banner_2x":"https:\/\/ps.w.org\/calendora-banners\/assets\/banner-1544x500.png?rev=3704347","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/calendora-banners\/assets\/icon-128x128.png?rev=3704347","icon_2x":"https:\/\/ps.w.org\/calendora-banners\/assets\/icon-256x256.png?rev=3704347","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-1.png?rev=3704347","caption":"The dashboard, showing what is on air right now and what comes next."},{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-2.png?rev=3704347","caption":"The campaign editor with content, schedule, images and per-campaign typography."},{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-3.png?rev=3704347","caption":"The campaign calendar for the coming weeks."},{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-4.png?rev=3704347","caption":"The name-day calendar with per-day overrides."},{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-5.png?rev=3704347","caption":"The evergreen screen with drag-and-drop ordering and on-air indicators."},{"src":"https:\/\/ps.w.org\/calendora-banners\/assets\/screenshot-6.png?rev=3704347","caption":""}],"raw_content":"<!--section=description-->\n<p>Calendora Banners manages promotional banners on a schedule, so you do not have to edit the homepage before every occasion.<\/p>\n\n<p>You set a campaign once: the content, the images, the buttons and the dates. The plugin decides what is on air. A Valentine's Day banner can start fourteen days before the date and stop on the day itself. When nothing seasonal is running, an evergreen campaign takes the slot instead.<\/p>\n\n<p>Seasonal and evergreen campaigns never mix. A seasonal campaign always wins; evergreen ones are the fallback for the quiet days between them. When several seasonal campaigns overlap, they rotate in a slider.<\/p>\n\n<p>The plugin makes no external requests. It sets no cookies, collects no statistics and sends nothing anywhere. The name-day calendar and the font are bundled with the plugin and read locally.<\/p>\n\n<h4>How it works<\/h4>\n\n<ul>\n<li>Add a campaign and choose whether it recurs every year on a fixed date, or runs once between two dates.<\/li>\n<li>Set how many days before the event it should start, and how many days after it should stop.<\/li>\n<li>Add desktop and mobile images, up to two call-to-action buttons, and the text.<\/li>\n<li>Place the banner with the <code>[caleba_banners]<\/code> shortcode, or drop the Calendora Banners widget into an Elementor layout.<\/li>\n<\/ul>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Recurring yearly campaigns with a lead time and a run-on period.<\/li>\n<li>One-off campaigns that run between two dates.<\/li>\n<li>Evergreen campaigns as an automatic fallback, in an order you control by drag and drop.<\/li>\n<li>A slider when several campaigns are active at the same time, with swipe support on touch devices.<\/li>\n<li>Separate desktop and mobile images, with a crop anchor for each.<\/li>\n<li>Up to two call-to-action buttons per campaign.<\/li>\n<li>A small formatting toolbar for the headline and description: bold, italic, underline and line breaks.<\/li>\n<li>Per-campaign typography: sizes, weights, colours and content alignment.<\/li>\n<li>A local 366-day Polish name-day calendar with per-day overrides and no external API.<\/li>\n<li>Name-day shortcodes you can use anywhere: <code>[caleba_today_names]<\/code>, <code>[caleba_tomorrow_names]<\/code>, <code>[caleba_day_plus_2_names]<\/code>, <code>[caleba_day_plus_3_names]<\/code>.<\/li>\n<li>A test mode that simulates another date, so you can check a schedule without changing the server clock. It applies only to the logged-in administrator who enabled it.<\/li>\n<li>Neutral, theme-independent slider navigation, with an optional setting to let your theme style it instead.<\/li>\n<li>White-label: your own name, logo and accent colour in the admin panel.<\/li>\n<li>Import campaigns from a JSON file, and download the bundled starter file as a starting point. The plugin does not export your existing campaigns.<\/li>\n<li>An admin panel built on a documented design-token system, with a self-hosted font and no external CDN.<\/li>\n<\/ul>\n\n<h3>Third-party software and data<\/h3>\n\n<ul>\n<li>Geist Sans variable font, from the vercel\/geist-font project, under the SIL Open Font License 1.1. The font is bundled and served from the plugin directory; no external font CDN is used.<\/li>\n<li>Polish name-day dataset, derived from the Poland list in the milan-fabian\/name-day-list project, under the GNU GPL v3.0. The data is bundled locally so the plugin needs no external API.<\/li>\n<\/ul>\n\n<p>Full notices, including licence texts and attribution, are in THIRD-PARTY-NOTICES.txt inside the plugin directory.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin and activate it.<\/li>\n<li>Open Calendora Banners in the WordPress admin menu.<\/li>\n<li>Review the starter campaigns that were created for you, and edit the ones you want to keep.<\/li>\n<li>Add your own images and button links.<\/li>\n<li>Place <code>[caleba_banners]<\/code> on a page, or add the Calendora Banners widget in Elementor.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20elementor%3F\"><h3>Do I need Elementor?<\/h3><\/dt>\n<dd><p>No. Elementor is optional. The shortcode works on its own, and the plugin does not fail if Elementor is absent. If Elementor is installed, an extra widget becomes available with its own layout and styling controls.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20any%20data%20anywhere%3F\"><h3>Does the plugin send any data anywhere?<\/h3><\/dt>\n<dd><p>No. It makes no external HTTP requests, loads no external fonts or scripts, sets no cookies and collects no analytics. The name-day data and the font are bundled with the plugin.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20two%20campaigns%20overlap%3F\"><h3>What happens when two campaigns overlap?<\/h3><\/dt>\n<dd><p>They rotate in a slider. You set the maximum number of banners shown at once in the settings.<\/p><\/dd>\n<dt id=\"why%20does%20my%20evergreen%20campaign%20not%20appear%3F\"><h3>Why does my evergreen campaign not appear?<\/h3><\/dt>\n<dd><p>Because a seasonal campaign is running. Evergreen campaigns are a fallback for the days when nothing seasonal is scheduled; they never appear alongside a seasonal campaign. You can also switch the fallback off entirely in the settings.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20name-day%20calendar%20without%20the%20banners%3F\"><h3>Can I use the name-day calendar without the banners?<\/h3><\/dt>\n<dd><p>Yes. The four name-day shortcodes return just the names, with no markup, so you can place them in any page, post or text widget.<\/p><\/dd>\n<dt id=\"will%20uninstalling%20delete%20my%20campaigns%3F\"><h3>Will uninstalling delete my campaigns?<\/h3><\/dt>\n<dd><p>Not unless you ask it to. By default the plugin keeps your data when you delete it. There is a setting, \"Delete all plugin data on uninstall\", which you have to switch on yourself if you want a clean removal.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translated%3F\"><h3>Is the plugin translated?<\/h3><\/dt>\n<dd><p>The interface is in English and ships with a Polish translation. The name-day calendar itself is Polish data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.4<\/h4>\n\n<ul>\n<li>Improved WordPress.org coding standards compliance.<\/li>\n<li>Added consistent plugin-specific prefixes for public identifiers and stored data. Existing campaigns, settings, name-day overrides, test mode and evergreen order are migrated automatically on the first admin page load after the update.<\/li>\n<li>Shortcodes are renamed and the old names no longer work. The banner shortcode is now [caleba_banners], and the name-day shortcodes are [caleba_today_names], [caleba_tomorrow_names], [caleba_day_plus_2_names] and [caleba_day_plus_3_names]. Update any page that used the previous names.<\/li>\n<li>Hardened output escaping throughout the admin interface.<\/li>\n<li>Removed redundant manual translation loading.<\/li>\n<li>Updated the public package to rely on WordPress.org translation delivery.<\/li>\n<li>Corrected the feature list: the plugin imports campaigns from JSON and lets you download the bundled starter file, but it does not export existing campaigns.<\/li>\n<li>Preserved existing campaign scheduling, slider, name-day, Test Mode and Elementor behaviour.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Fixed: when a toggle switch was turned on, the knob jumped three pixels upwards and stuck out above the switch, so the control looked misaligned. Off state was fine. The cause was a rule in WordPress core's own admin stylesheet that the plugin was not overriding in the checked state.<\/li>\n<li>Fixed: the knob also stopped a few pixels short of the right edge when switched on. It now travels the full distance.<\/li>\n<li>Added a browser-based test that measures the switch geometry in both states, so this cannot come back unnoticed.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Fixed: turning on \"Use theme colors for navigation\" still showed the arrows in the plugin's own colours. The theme mode now declares no colours at all, so your theme's button styling finally applies.<\/li>\n<li>Fixed: the slider dots kept hard-coded colours in both modes. They now follow the selected mode like the arrows and the pause control.<\/li>\n<li>Fixed: vertical alignment of the toggle switches in settings rows, this time without depending on a container property a more specific rule can override.<\/li>\n<li>Fixed: added breathing room between the \"Save settings\" button and the Test mode section below it.<\/li>\n<li>Neutral mode, mobile behaviour, keyboard access, ARIA labels and reduced-motion handling are unchanged.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fixed: slider arrows and the pause control picked up colours from the active site theme. Theme button rules are more specific than the plugin's own, and the admin preview has no theme stylesheet, which is why the preview looked right and the front end did not.<\/li>\n<li>Navigation now has its own neutral styling, scoped to the banner so a theme cannot override it.<\/li>\n<li>Added a setting, \"Use theme colors for navigation\", off by default, for people who want the theme to style the arrows and pause control.<\/li>\n<li>Fixed spacing of the save button in Test Mode and on the Name days screen.<\/li>\n<li>Fixed vertical alignment of the toggle switches in settings rows.<\/li>\n<li>Mobile behaviour, keyboard access, ARIA labels and reduced-motion handling are unchanged.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Renamed the product to Calendora Banners. The technical prefixes, the post type and the <code>[smart_campaigns]<\/code> shortcode are unchanged, so existing pages keep working.<\/li>\n<li>Security: call-to-action links are now escaped as URLs, so schemes such as <code>javascript:<\/code> or <code>data:text\/html<\/code> can no longer reach the front end. Previously they were escaped only as attributes.<\/li>\n<li>Security: imported JSON is validated much more strictly. Event dates must exist in the calendar, one-off campaigns need a real date window, and link schemes are checked. Uploaded files are verified as genuine HTTP uploads.<\/li>\n<li>Security: image addresses are encoded for the CSS context, so they cannot break out of <code>url()<\/code> and inject their own declarations.<\/li>\n<li>Security: request data is unslashed correctly. Brand names and name-day overrides containing an apostrophe no longer accumulate backslashes on each save.<\/li>\n<li>Security: campaign actions verify the post type first, so a plugin action can no longer delete or overwrite an unrelated WordPress post.<\/li>\n<li>Security: data migrations now require the <code>manage_options<\/code> capability.<\/li>\n<li>Removed all content specific to the original client. The starter campaigns are now neutral commercial examples.<\/li>\n<li>The interface is fully internationalised, with English source strings and a Polish translation.<\/li>\n<li>Accessibility: the carousel can be paused, stops on focus and on touch, and does not auto-advance for visitors who ask for reduced motion.<\/li>\n<li>Accessibility: inactive slides are hidden from screen readers, and the carousel exposes a proper region role.<\/li>\n<li>Settings: a new \"Delete all plugin data on uninstall\" option, off by default, so removing the plugin keeps your campaigns unless you say otherwise.<\/li>\n<li>Added <code>LICENSE<\/code>, plugin metadata required by the plugin directory, and a WordPress.org readiness contract to the test suite.<\/li>\n<li>Fixed a defect in the test runner that reported some failing contracts as passing.<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>Fixed: bold text in the banner headline picked up an uncontrolled weight of 900 and switched to a different cut of the typeface.<\/li>\n<li>Bold weights are now explicit: 800 in the headline, 700 in the description.<\/li>\n<li>Bold, italic and underline each change one property only; the typeface, size and letter spacing stay as they were.<\/li>\n<li>Unformatted content looks exactly as before.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>A small formatting toolbar above the headline and description: bold, italic, underline and line break.<\/li>\n<li>The headline is a multi-line field, and Enter inserts a real line break.<\/li>\n<li>Only <code>strong<\/code>, <code>em<\/code>, <code>u<\/code> and line breaks are allowed; every other tag is stripped.<\/li>\n<li>Content is filtered on save and again on render, so older records are safe too.<\/li>\n<li>No TinyMCE and no full WYSIWYG editor.<\/li>\n<li>The dashboard counts what is on air using the same helper as the front end.<\/li>\n<li>Fixed: content containing an ampersand came back into the editor correctly.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Drag-and-drop ordering for evergreen campaigns, with a handle on each card.<\/li>\n<li>The order is saved without reloading the page, with a confirmation message.<\/li>\n<li>Move up and move down buttons for keyboard use; they work without JavaScript too.<\/li>\n<li>An on-air marker on the campaigns that are actually being shown, with their slot number.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Four global name-day shortcodes that return just the names, with no markup.<\/li>\n<li>The shortcodes use the same calendar and the same tokens as the banners, and respect test mode.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Banner polish: a lighter name-day footer, smaller desktop arrows that appear on hover and focus, and mobile content moved higher.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Test mode with a simulated date and an optional forced campaign, stored per administrator.<\/li>\n<li>Dynamic name-day tokens for tomorrow and the next two days.<\/li>\n<li>Per-campaign typography and image positioning, with inline validation in the editor.<\/li>\n<li>The admin stylesheet was split into ten modules with no visual change.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Rebuilt admin foundation and dashboard on a documented design-token system.<\/li>\n<li>Self-hosted Geist variable font, no external font CDN.<\/li>\n<\/ul>","raw_excerpt":"Schedule seasonal and evergreen promotional banners with name days, Test Mode, white-label options and optional Elementor support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370763","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=370763"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/goldenpixel"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370763"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370763"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370763"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370763"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370763"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}