WebCalendar
WebCalendar gives your WordPress site a clean, responsive calendar with the features you actually need — recurring events, iCal import, holiday imports, email reminders, and fine-grained permissions — without the complexity. Calendar Views & Display Month, week, and day views with smooth AJAX navigation — no page reloads Responsive design that adapts to any theme and screen size Color-coded categories for visual organization Gutenberg blocks (Calendar + Upcoming Events) and [webcalendar] shortcode Event Management Recurring events — daily, weekly, monthly, and yearly patterns with RRULE support Edit a single instance or the entire series File attachments via the WordPress Media Library Public, Private, and Confidential visibility levels Filter the calendar by tag, and jump straight to what visitors are looking for Venues and organizers — reusable places and contacts, managed in one screen, shown on every event page Custom event fields — text, dates, drop-downs and more, defined once and filled in on every event Online and hybrid events with a “Join online” link, separate from the physical location Conflict detection warns you about overlapping events (Starter+) Filter the calendar by venue and organizer (Starter+) Import, Export & Sync Import .ics files from Google Calendar, Outlook, Apple Calendar, or any iCal source One-click migration from The Events Calendar — venues, organizers, categories, images and recurring events, with undo Side-by-side trial: run WebCalendar next to The Events Calendar with scheduled one-way sync, then switch — or remove everything in one click Export your calendar in iCalendar format Import public holidays for any country Subscribe to remote iCal feeds with automatic hourly sync (Starter+) Collaboration & Permissions Invite WordPress users to events with email notifications Event reminders via WP-Cron 36 granular capabilities mapped to WordPress roles — control who can view, create, edit, and manage events Multi-user calendar filtering and shared calendar views Frontend event submissions with admin approval queue (Starter+) Category merging for cleaning up duplicate categories (Business+) SEO & Sharing Single event pages with SEO-friendly permalinks Schema.org Event JSON-LD, Open Graph, and Twitter Card meta tags Social share buttons and “Add to Google/Outlook/Yahoo” one-click buttons AI Integration Built-in MCP server lets AI assistants (Claude, ChatGPT, etc.) manage your calendar — free on every edition AI admin page with connection wizard, tools reference, and one-click testing WordPress Abilities API integration for WP 6.9+ For Developers Full REST API for events, categories, holidays, layers, and shared calendars Built on Clean Architecture with webcalendar-core business logic library PSR-4 autoloading, PHPStan Level 9, 1400+ automated tests All calendar data in dedicated webcal_* tables — no Custom Post Types Technical Note: Database Architecture This plugin integrates webcalendar-core, a framework-agnostic Composer library that provides all calendar business logic (events, recurrence, iCal, permissions) through 17 repository classes. These repositories require PDO and use exclusively parameterized prepared statements — no raw SQL concatenation. WordPress-specific data (users, options, capabilities) is accessed via $wpdb through the plugin’s Bridge layer (WpUserRepository, WpConfigRepository, etc.). See src/Bridge/PdoFactory.php for the connection factory. External Services This plugin connects to the following third-party services: Nager.Date API Used for importing public holidays via WebCalendar > Holidays. * Endpoint: https://date.nager.at/api/v3/ * Privacy Policy Google Calendar Public Feeds Alternative holiday source. Fetches public .ics files from Google. * Endpoint: https://calendar.google.com/calendar/ical/ * Google Privacy Policy * Google Terms of Service Thunderbird Holiday Calendars Alternative holiday source via community-maintained .ics files. * Endpoint: https://www.thunderbird.net/media/caldata/ * Mozilla Privacy Policy Freemius License Server Used for license validation, automatic updates, and optional usage analytics. * Endpoint: https://api.freemius.com/ * Privacy Policy * Terms of Service * Data transmitted: license key, site URL, plugin version, WordPress version OpenStreetMap / Nominatim When a single event page has a location and the map provider is set to OpenStreetMap (the default), the plugin geocodes the address via the Nominatim API and displays a map using OpenStreetMap tile servers. The event location string is sent as a search query. No user personal data is transmitted. * Geocoding endpoint: https://nominatim.openstreetmap.org/search * Tile server: https://tile.openstreetmap.org/ * OpenStreetMap Terms of Use * Nominatim Usage Policy * OpenStreetMap Privacy Policy Google Maps Embed API When the map provider is set to Google Maps in settings, single event pages display an embedded Google Map for the event location. The event location string and your Google Maps API key are sent to Google. No other user data is transmitted. * Endpoint: https://www.google.com/maps/embed/v1/place * Google Maps Platform Terms of Service * Google Privacy Policy Add to Calendar Links Single event pages include “Add to Calendar” buttons that generate links to Google Calendar, Outlook.com, and Yahoo Calendar. When a visitor clicks a button, the event title, date, time, location, and description are passed as URL parameters to the chosen service. No data is sent until the visitor clicks. * Google Calendar: https://www.google.com/calendar/render * Outlook.com: https://outlook.live.com/calendar/0/action/compose * Yahoo Calendar: https://calendar.yahoo.com/ Social Sharing Links Single event pages include social sharing buttons for Facebook, X (Twitter), and LinkedIn. When a visitor clicks a button, the event page URL and title are passed as URL parameters to the chosen service. No data is sent until the visitor clicks. * Facebook: https://www.facebook.com/sharer/sharer.php * X (Twitter): https://x.com/intent/tweet * LinkedIn: https://www.linkedin.com/sharing/share-offsite/ Development & Source Code Full unminified source for this plugin is included in this distribution under GPL-2.0-or-later — you do not need to download anything external to rebuild the compiled assets. What ships in this zip: src/ — unminified React/JSX source for all admin components, frontend calendar, and the mini-calendar widget build/ — the pre-compiled minified bundles (what the plugin actually loads at runtime) package.json + package-lock.json — Node build manifest and lockfile for reproducible npm install composer.json — PHP dependency manifest Rebuilding the compiled assets from source: Prerequisites: PHP 8.1 or higher with Composer 2, Node.js 20 or higher with npm 10. composer install — install PHP dependencies npm install — install JavaScript build dependencies (@wordpress/scripts, React, Toast UI Calendar, Leaflet, Tiptap) npm run build — compile src/index.js and src/frontend.js into the minified bundles under build/ The compiled output in build/ is byte-reproducible from the matching src/ at the same version using this toolchain.
Dienstplan
Dienstplan turns your WordPress site into a shift and duty roster that runs without a full-time coordinator. It is built for teams that rely on volunteers — fire departments, emergency medical services, first-responder and crisis-response groups, sports clubs and associations. Members open a calendar page and sign up for open shifts themselves. Coordinators see at a glance which shifts are still open, who already volunteered, and who has not yet contributed this period. Every change is recorded, so “who removed me from Saturday?” always has an answer. Everything runs on your own WordPress install. Member data, schedules and assignments stay in your database — no SaaS account, no recurring fee for the free version. Optional outbound connections (public-holiday lookup via openholidaysapi.org, product notices from wp-dienstplan.de) are documented under External services; the holiday lookup is disabled by default. What you can do Define shift types (early/late/night, driver/paramedic — whatever your team uses) and build week or month rosters Drop the roster onto any page with the [dienstplan] shortcode Show public aggregate statistics (completed shifts, hours, active helpers) with [dienstplan_statistik] — no login required, names never exposed Let members sign up for shifts and remove themselves again — coordinators see every change live, no email ping-pong Plan events like training nights, fundraisers or on-call duties with categories (per-event signup lists come with Basis) Show each member their own upcoming shifts in a dashboard widget Let members download their shifts as an ICS calendar file Why WordPress Most volunteer organisations already run a WordPress site for news and member communication. Adding the roster there means members use the account they already have, your data stays in your own database, and there is no external SaaS to vet for data protection. Free, Basis and Pro The version on WordPress.org is Free and stays free forever: one shift schedule, unlimited members, shift types and events — no artificial caps. Two optional add-ons extend the same plugin in place, with your data carrying over automatically: Basis — multiple rosters, recurring events, per-event signups and tasks, shift trading, group and weekday restrictions, automated email notifications, and a community feedback channel. For established teams that need self-service workflows. Pro — everything in Basis plus attendance statistics, a tamper-evident audit log and waiting-list promotion on full events. For organisations with reporting or audit obligations. Pricing and the full comparison are at wp-dienstplan.de. Languages Ships with English, German, Spanish, French and Italian. Source strings are English; further languages can be added via standard .po/.mo files in languages/. External services Product notices (wp-dienstplan.de) In the WordPress admin, on Dienstplan’s own screens only, the plugin may request https://www.wp-dienstplan.de/plugin/notices.json to show time-limited product information (for example a promotion). The request is a plain HTTP GET with no query parameters and no cookies from your site; no personal data, member data, license keys or site-identifying payload is transmitted. The response is cached locally (WordPress transient) for up to 12 hours. Notices are dismissible per administrator and never appear on other admin pages. This call is part of the free plugin distributed via WordPress.org. Public holidays (openholidaysapi.org) This plugin connects to the public OpenHolidays API (https://openholidaysapi.org) to retrieve official public-holiday dates for the country and (optional) region configured under Dienstplan → Settings → Holidays. The dates are stored in your own WordPress options and shown as background highlights on the calendar so members can see at a glance which days are public holidays. The feature is fully optional — clearing the holiday country in settings disables every outbound call to that API. It sends a request to https://openholidaysapi.org in three situations: GET /Countries — once, when the admin opens the holiday-settings page and the country list has not been cached yet. No payload, only an HTTP request. GET /Subdivisions?countryIsoCode=XX — once per country, when the admin selects a country in the settings UI to populate the region dropdown. The configured country code is transmitted as a query parameter. GET /PublicHolidays?countryIsoCode=XX&languageIsoCode=YY&validFrom=YYYY-01-01&validTo=YYYY-12-31[&subdivisionCode=ZZZZ] — once per year via WordPress cron, plus on demand when the admin triggers a manual refresh from the settings page. The configured country code, region code (if any), language code and requested year are sent as query parameters. In every case, only configuration values entered by the administrator are transmitted (country / region / language / year). No member names, email addresses, shift data or audit-log entries are sent. This service is provided by STÜBER SYSTEMS GmbH as an Open Data project: terms of use, privacy policy. Project documentation and the data-source overview are available at https://www.openholidaysapi.org. Privacy Dienstplan is built so that all member-related data — names, email addresses (from the WordPress user account), shift assignments, signup history, audit-log entries — stays exclusively in your own WordPress database. The free plugin’s only outbound HTTP requests are the calls documented in External services above (product notices from wp-dienstplan.de and, if enabled, OpenHolidays). Neither call transmits member or personal data. If you use the optional Basis or Pro add-on The commercial add-on contacts a separate license server at lizenz.wp-dienstplan.de for license activation and a daily license-status check. The data transmitted is limited to the license key, your site URL, and a status flag — no member data, no shift data and no email addresses are sent. License-server activity is logged with industry-standard webserver logs (IP, timestamp, user agent) for fraud prevention; the privacy policy at wp-dienstplan.de documents this in detail. The license server is not active in the free plugin distributed via WordPress.org. Cookies and trackers Dienstplan sets no cookies of its own and uses no third-party trackers. The plugin relies on WordPress’s standard authentication cookies for member login and on localStorage for remembering the last selected roster on multi-roster pages.