Repository navigation
Releases
v3.0.3
v3.0.2
Accessibility: the calendar is now a labelled region ("Categorized Calendar Events") with a hidden top-level heading, a consistent heading outline, navigation and search landmarks, and a labelled events region. New title="…" shortcode attribute. No visual changes.
v3.0.1
v3.0.0 — CalendarCats
Renamed from WPCalendarCats to CalendarCats.
- New slug, shortcode
[calendarcats], main filecalendarcats.php, REST namespacecalendarcats/v1. - Compatibility:
[wpcalendarcats]still works, settings are migrated automatically, old REST URLs still respond. - Assets:
calendarcats.zip(new installs) andwpcalendarcats.zip(legacy build so existing installs update in place).
v2.2.3
v2.2.2
- Oversized feeds. A feed larger than 5 MB now reports "The feed is too large to load." instead of silently showing only the events in its first 5 MB.
- Admin: the "Clear feed cache now" button no longer shares an id with Save Changes, and the categories import/export box has an accessible label.
- Letter-spacing from your theme is kept on event rows and calendar chips.
v2.2.1
- Keyboard access. Events in the Cards and Calendar views are real buttons, so they can be reached with Tab and opened with Enter or Space. The event popup is now a labelled dialog: focus moves into it, Tab is kept inside, and Esc or Close returns focus to the event that opened it.
- Focus and announcements. Keyboard focus is kept when the calendar re-renders (Next / Previous, category pills, Cards / Calendar). Loading, search result counts, "no results" and errors are announced to screen readers. The search box has a proper label, a visible focus ring, and animations respect reduced-motion.
- Safer feed fetching. Feeds are fetched with
wp_safe_remote_get(no localhost / private-network targets), responses are capped at 5 MB, and Squarespace paging can no longer be redirected to another host. The iframeurlshortcode attribute is limited to the saved calendar's host. - Faster. Each date window is cached after parsing, so repeat visits skip feed parsing and recurrence expansion. Cache flushing is instant and works with an object cache. Logged-out REST responses carry a short
Cache-Control. Saving unrelated settings no longer flushes the feed cache. - Admin. "Settings saved" and "Cache cleared" notices now show. Selects and group fields are labelled, the Show options are a fieldset, remove/move buttons name their category, and confirm prompts are translatable.
- Code: WordPress coding-standards formatting, docblocks, specific
phpcs:ignorerules, ICS alarm blocks no longer leak into event descriptions, and the unused text-domain loader was removed.
v2.2.0
Adds multi-day events, a Today view, an opt-in remembered category filter, an About popup, Squarespace / RSS / farmers-market sources and cross-source de-duplication. Existing shortcodes and settings keep working; new options default to off.
= 2.0.0 =
Major rewrite: the plugin now renders the calendar itself instead of embedding an external app. Existing [wpcalendarcats] shortcodes keep working, and your old iframe URL is preserved — add mode="iframe" to any shortcode you want to keep as an embed.
== Changelog ==
= 2.2.0 =
- Multi-day events. An event that spans several days now shows on every day it covers in the Calendar view, with a "▸ cont'd" chip after the first day. Card rows show "→ Mon D" under the date badge, an in-progress multi-day event stays in the current list instead of dropping to "Earlier this period", and the popup and search results show the full range ("Sep 25 – Sep 27"). All-day ends are handled as exclusive, per iCalendar, so a one-day all-day event is not stretched to two.
- Today view. New
unit="day"shortcode value and a Today button in the Week / Month switch: a one-day agenda with previous / next day navigation. - Remember my filter. New opt-in checkbox beside the category pills (
remember="yes|no", also an admin setting). Stores the picked categories in a first-party cookie (cc_category_filter, withcc_remember_filteras the opt-in marker) for up to a year. Choosing All, or unticking the box, removes it. Cards and Calendar share one selection. - About popup. New About button (
about="yes|no", also an admin setting) opening a keyboard-accessible dialog: Esc to close, focus kept inside, focus returned on close. It lists every source with a "Visit site" link and shows an optional contact email (new admin field). - New source types. Squarespace event pages, Wild Apricot events RSS feeds, and a built-in 2026 Chicago 60625 farmers-market schedule, each configurable in the admin. RSS events are start-only.
- Cross-source de-duplication. The same event published by two sources is merged into one, keeping the richer record and listing the other publisher as "Also listed by".
- Accessibility: new text and controls were checked against WCAG 1.4.3 (4.5:1) in both themes; the dialog is labelled and modal, and the continuation marker is announced as "continued".
- The
/eventsREST response gains asourceslist (name and link) used by the About popup.
v2.1.3 — SVG toolbar icons (final contrast issue)
Clears the last critical issue the scanner reported: 7 elements under "text and background colour combinations meet the 4.5:1 AA contrast ratio".
The count did not move between 2.1.1 and 2.1.2, which ruled out the count badges fixed in 2.1.2. Enumerating every glyph-only visible node found exactly 7 that a contrast checker cannot evaluate: the six toolbar icon buttons and the emoji magnifier in the search box.
These were never real failures. Measured directly, the icon buttons are 5.24:1 in light mode and 6.2:1 in dark, both clearing 4.5:1. But a glyph is a character, not a shape, so axe returns "unable to determine" rather than pass, and the node stays on the report permanently. No colour change can clear it.
So the characters are gone. Back, forward, refresh, text-size, light/dark and the search magnifier now render inline SVG, aria-hidden, with the accessible name still coming from the aria-label each button already carried. With no text node, the contrast rule no longer applies. SVG also renders identically across platforms, which the glyphs did not.
Category emoji are now aria-hidden too — the category name always sits beside the icon, so screen readers were announcing "classical building, Ward Office".
Verified on the live event feed across light, dark, desktop and mobile: zero violations and, for the first time, zero indeterminate nodes. Glyph-only nodes exposed to checkers went from 7 to 0.
No visual change is intended. Note this fix is inferred rather than confirmed against the vendor's own element list, which is paywalled.
Download wpcalendarcats.zip below, or update in place from Plugins.
v2.1.2 — Scanner-reported accessibility fixes
Clears the two critical issues a third-party scanner still reported on the live page running 2.1.1. Both are real, and one was introduced by 2.1.1.
Focus order semantics (10 elements). The scrollable category lists got tabindex=0 and role="group" in 2.1.1. group reads correctly, but a focusable scroll container is only permitted to be application, main or region — so all ten lists traded one failure for another. They are now role="region", which keeps the accessible name and satisfies both rules.
Colour contrast (7 elements). These were nodes axe reports as indeterminate rather than failing, because the content is a single digit or a lone glyph. Measured by hand, two genuinely failed: the event count badge painted a hardcoded white number on the raw category colour, giving 4.32:1 on the mid greens and 3.54:1 on the greys against a required 4.5:1.
The badge number now uses a new --wpcc-cat-fg, computed at render time against the colour the badge actually paints. White is kept wherever it already passed, so most badges look unchanged; where it did not, the category colour is darkened toward black rather than dropping to a flat black. Worst case across all 17 live categories is now 4.53:1.
Count badges also read as "5 events" instead of a bare "5" to screen readers.
Verified at zero violations with focus-order-semantics enabled, across light, dark, desktop and mobile, using the live site's real event feed.
Download wpcalendarcats.zip below, or update in place from Plugins if you are already on 2.1.0 or later.