Calendora Banners

Description

Calendora Banners manages promotional banners on a schedule, so you do not have to edit the homepage before every occasion.

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.

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.

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.

How it works

  • Add a campaign and choose whether it recurs every year on a fixed date, or runs once between two dates.
  • Set how many days before the event it should start, and how many days after it should stop.
  • Add desktop and mobile images, up to two call-to-action buttons, and the text.
  • Place the banner with the [caleba_banners] shortcode, or drop the Calendora Banners widget into an Elementor layout.

Features

  • Recurring yearly campaigns with a lead time and a run-on period.
  • One-off campaigns that run between two dates.
  • Evergreen campaigns as an automatic fallback, in an order you control by drag and drop.
  • A slider when several campaigns are active at the same time, with swipe support on touch devices.
  • Separate desktop and mobile images, with a crop anchor for each.
  • Up to two call-to-action buttons per campaign.
  • A small formatting toolbar for the headline and description: bold, italic, underline and line breaks.
  • Per-campaign typography: sizes, weights, colours and content alignment.
  • A local 366-day Polish name-day calendar with per-day overrides and no external API.
  • Name-day shortcodes you can use anywhere: [caleba_today_names], [caleba_tomorrow_names], [caleba_day_plus_2_names], [caleba_day_plus_3_names].
  • 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.
  • Neutral, theme-independent slider navigation, with an optional setting to let your theme style it instead.
  • White-label: your own name, logo and accent colour in the admin panel.
  • Import campaigns from a JSON file, and download the bundled starter file as a starting point. The plugin does not export your existing campaigns.
  • An admin panel built on a documented design-token system, with a self-hosted font and no external CDN.

Third-party software and data

  • 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.
  • 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.

Full notices, including licence texts and attribution, are in THIRD-PARTY-NOTICES.txt inside the plugin directory.

Screenshots

Installation

  1. Upload the plugin and activate it.
  2. Open Calendora Banners in the WordPress admin menu.
  3. Review the starter campaigns that were created for you, and edit the ones you want to keep.
  4. Add your own images and button links.
  5. Place [caleba_banners] on a page, or add the Calendora Banners widget in Elementor.

FAQ

Do I need Elementor?

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.

Does the plugin send any data anywhere?

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.

What happens when two campaigns overlap?

They rotate in a slider. You set the maximum number of banners shown at once in the settings.

Why does my evergreen campaign not appear?

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.

Can I use the name-day calendar without the banners?

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.

Will uninstalling delete my campaigns?

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.

Is the plugin translated?

The interface is in English and ships with a Polish translation. The name-day calendar itself is Polish data.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Calendora Banners” is open source software. The following people have contributed to this plugin.

Contributors

“Calendora Banners” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Calendora Banners” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.6.4

  • Improved WordPress.org coding standards compliance.
  • 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.
  • 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.
  • Hardened output escaping throughout the admin interface.
  • Removed redundant manual translation loading.
  • Updated the public package to rely on WordPress.org translation delivery.
  • 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.
  • Preserved existing campaign scheduling, slider, name-day, Test Mode and Elementor behaviour.

1.6.3

  • 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.
  • Fixed: the knob also stopped a few pixels short of the right edge when switched on. It now travels the full distance.
  • Added a browser-based test that measures the switch geometry in both states, so this cannot come back unnoticed.

1.6.2

  • 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.
  • Fixed: the slider dots kept hard-coded colours in both modes. They now follow the selected mode like the arrows and the pause control.
  • Fixed: vertical alignment of the toggle switches in settings rows, this time without depending on a container property a more specific rule can override.
  • Fixed: added breathing room between the “Save settings” button and the Test mode section below it.
  • Neutral mode, mobile behaviour, keyboard access, ARIA labels and reduced-motion handling are unchanged.

1.6.1

  • 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.
  • Navigation now has its own neutral styling, scoped to the banner so a theme cannot override it.
  • Added a setting, “Use theme colors for navigation”, off by default, for people who want the theme to style the arrows and pause control.
  • Fixed spacing of the save button in Test Mode and on the Name days screen.
  • Fixed vertical alignment of the toggle switches in settings rows.
  • Mobile behaviour, keyboard access, ARIA labels and reduced-motion handling are unchanged.

1.6.0

  • Renamed the product to Calendora Banners. The technical prefixes, the post type and the [smart_campaigns] shortcode are unchanged, so existing pages keep working.
  • Security: call-to-action links are now escaped as URLs, so schemes such as javascript: or data:text/html can no longer reach the front end. Previously they were escaped only as attributes.
  • 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.
  • Security: image addresses are encoded for the CSS context, so they cannot break out of url() and inject their own declarations.
  • Security: request data is unslashed correctly. Brand names and name-day overrides containing an apostrophe no longer accumulate backslashes on each save.
  • Security: campaign actions verify the post type first, so a plugin action can no longer delete or overwrite an unrelated WordPress post.
  • Security: data migrations now require the manage_options capability.
  • Removed all content specific to the original client. The starter campaigns are now neutral commercial examples.
  • The interface is fully internationalised, with English source strings and a Polish translation.
  • Accessibility: the carousel can be paused, stops on focus and on touch, and does not auto-advance for visitors who ask for reduced motion.
  • Accessibility: inactive slides are hidden from screen readers, and the carousel exposes a proper region role.
  • Settings: a new “Delete all plugin data on uninstall” option, off by default, so removing the plugin keeps your campaigns unless you say otherwise.
  • Added LICENSE, plugin metadata required by the plugin directory, and a WordPress.org readiness contract to the test suite.
  • Fixed a defect in the test runner that reported some failing contracts as passing.

1.5.5

  • Fixed: bold text in the banner headline picked up an uncontrolled weight of 900 and switched to a different cut of the typeface.
  • Bold weights are now explicit: 800 in the headline, 700 in the description.
  • Bold, italic and underline each change one property only; the typeface, size and letter spacing stay as they were.
  • Unformatted content looks exactly as before.

1.5.4

  • A small formatting toolbar above the headline and description: bold, italic, underline and line break.
  • The headline is a multi-line field, and Enter inserts a real line break.
  • Only strong, em, u and line breaks are allowed; every other tag is stripped.
  • Content is filtered on save and again on render, so older records are safe too.
  • No TinyMCE and no full WYSIWYG editor.
  • The dashboard counts what is on air using the same helper as the front end.
  • Fixed: content containing an ampersand came back into the editor correctly.

1.5.3

  • Drag-and-drop ordering for evergreen campaigns, with a handle on each card.
  • The order is saved without reloading the page, with a confirmation message.
  • Move up and move down buttons for keyboard use; they work without JavaScript too.
  • An on-air marker on the campaigns that are actually being shown, with their slot number.

1.5.2

  • Four global name-day shortcodes that return just the names, with no markup.
  • The shortcodes use the same calendar and the same tokens as the banners, and respect test mode.

1.5.1

  • Banner polish: a lighter name-day footer, smaller desktop arrows that appear on hover and focus, and mobile content moved higher.

1.5.0

  • Test mode with a simulated date and an optional forced campaign, stored per administrator.
  • Dynamic name-day tokens for tomorrow and the next two days.
  • Per-campaign typography and image positioning, with inline validation in the editor.
  • The admin stylesheet was split into ten modules with no visual change.

1.4.0

  • Rebuilt admin foundation and dashboard on a documented design-token system.
  • Self-hosted Geist variable font, no external font CDN.