Occupancy Plan provides schedules for sports facilities, rooms, courts, halls and other shared resources. Create schedules in WordPress and publish each with a shortcode.
Visitors can browse available periods without reloading the complete page. Depending on the schedule configuration and their permissions, guests or logged-in users can create bookings, view details and manage existing bookings directly in the frontend.
SCHEDULE DISPLAY AND NAVIGATION
- Daily, one-week, two-week, monthly and yearly schedule views
- Responsive desktop and mobile layouts
- AJAX navigation between dates, weeks, months, years and courts without reloading the page
- Optional compact monthly week picker for fast navigation in weekly views
- Configurable weekday selection, abbreviated weekday names and optional navigation header
- Print-optimized schedule, including the date below each weekday in the weekly view
- Configurable header, text, border, booking background and booking text colors
-
Anonymized frontend display and configurable booking tooltips
PLANS, COURTS AND TIME SLOTS
-
Create and manage multiple independent occupancy schedules
- Limit each schedule to a configurable start and end date
- Configure operating hours and time intervals from 5 to 90 minutes
- Define break periods and optional breaks between consecutive slots
- Use automatically generated periods or individually configured fixed time slots with display names
- Manage multiple courts, rooms or other resources with custom names, short names and sort order
- Divide resources into named child courts or sub-resources
-
Configure schedules for time-based or full-day bookings
BOOKINGS AND SERIES
-
Create, edit, delete and move authorized bookings in the frontend
- Create and manage bookings in the WordPress administration area
- One-time, weekly, monthly, flexible and every-second-week booking intervals
- Exceptions for individual dates in recurring bookings, for example holidays
- Conflict detection for times, courts, child courts and recurring bookings
- Configurable booking window that limits how many days in advance a booking can be made
- Booking priorities to control the display order of overlapping entries
- Prepared booking templates for frequently used booking data
- Custom booking colors, contact information, comments and authorized users
-
Up to four configurable custom fields, including mandatory fields and selectable values
PERMISSIONS, PRIVACY AND APPROVALS
-
Optional guest booking or capability-based access for logged-in users
- Dedicated Occupancy User, Editor, Owner and Manager roles
- Users can be allowed to edit their own bookings; managers retain full administration access
- Separate permissions for changing booking times, intervals and courts in the frontend
- Optional provisional booking and approval workflow
- Confirm or reject requests in the administration area and send corresponding notifications
- Optional confirmation checkbox, information text and information link in the booking dialog
-
Server-side validation, nonce protection and escaped frontend output for protected booking actions
ADMINISTRATION, EMAIL AND DATA EXCHANGE
-
Searchable administration lists and bulk deletion for schedule data
- Context-sensitive help for schedule, booking, template, court, time-slot, exception and preview pages
- Copyable shortcode reference with defaults and practical examples
- CSV import and export for schedules and bookings
- Protected iCalendar download and secret subscription feed with recurrence rules and exceptions
- Configurable email notifications to administrators and booking users
- Custom sender, recipients, CC, subjects and message templates with booking placeholders
- Dashboard widget for occupancy managers showing the latest bookings
- Optional automatic cleanup of old bookings
- Complete bundled German translation and WordPress.org-compatible localization support
1.6.0
- Tested with WordPress version 7.1
- Fix: Let Occupancy Editors edit, move and delete bookings they created themselves while keeping Authorized Users restricted to Occupancy Owners and managers
- Fix: Delete frontend bookings through a dedicated authenticated AJAX endpoint with nonce, schedule and ownership checks
- Fix: Decouple the core frontend click/AJAX script from optional jQuery UI and color-picker dependencies so optimization or theme changes cannot suppress booking interaction entirely
- Compatibility: Enqueue Occupancy Plan assets during the regular wp_enqueue_scripts phase when the shortcode is present, with shortcode-time loading retained as a fallback for dynamic builders
- Fix: Repair missing capabilities on existing Occupancy Plan roles during normal plugin updates, including legacy Occupancy Editor installations, so editors retain permission to create frontend bookings
- Fix: Keep the current day bookable when a booking window is configured; compare booking windows by calendar date instead of clock time.
- Fix: Make frontend availability cache-safe: render structurally available slots independently of the cached viewer and verify booking permission when the AJAX dialog is requested
- Privacy: Populate logged-in user name and email only in the fresh AJAX booking dialog instead of embedding user-specific defaults in cacheable schedule markup
- Fix: Ensure clicks on free frontend slots always reach the booking dialog, even if optional jQuery UI drag/drop or color-picker enhancements are unavailable or loaded late
- Fix: Read booking slot metadata robustly from the clickable schedule cell and its inner element
- Fix: Route frontend booking saves through WordPress AJAX and return structured validation errors
- Fix: Restore reliable frontend booking dialogs on cached pages while keeping booking writes protected by a fresh nonce
- Fix: Use the localized admin-post endpoint and the fresh dialog nonce for frontend booking actions
- Fix: Render the administration preview without stripping shortcode form controls
- Fix: Load frontend schedule assets early enough for a correctly styled administration preview
- Internationalization: Rebuild the translation catalog from the current plugin source
- Translation: Complete the bundled German translation for all current plugin strings
- Translation: Add missing strings introduced after the previous POT generation
- Translation: Rely on WordPress just-in-time localization using the plugin Text Domain and Domain Path metadata
- Maintenance: Add a reproducible WP-CLI translation update script for future releases
- Improvement: Increase horizontal spacing in the compact weekly date range for readability
1.5.9
- Improvement: Shorten the weekly date range by omitting repeated month and year components
- Improvement: Remove the "from"/"to" labels, emphasize the separator and add more horizontal breathing room
- Fix: Critical-Error in admin help page
1.5.8
- Improvement: Redesign the frontend period selector as a compact toolbar with grouped navigation, date range and resource selector
- Improvement: Add clearer hover/focus states and responsive wrapping for narrow screens
1.5.7
- Fix: Remove theme-added borders around the empty top-left schedule corner, including collapsed table-border conflicts
- Accessibility: Mark structural empty corner cells as hidden from assistive technology
- Repository: Use the numeric stable tag 1.5.7 for the corresponding WordPress.org SVN release tag
1.5.6
- Maintenance: Correct PHPCS suppression scopes for 15 prepared queries that use trusted plugin table identifiers
- Compatibility: Retain the declared WordPress 4.9 baseline instead of requiring the newer %i identifier placeholder
1.5.3
- Compatibility: Replace deprecated readonly() calls with a WordPress 4.9-compatible plugin helper
- Maintenance: Clarify translator comments for CSV upload-size placeholders
- Maintenance: Document trusted plugin table identifiers and prepared query variables for static analysis
- Maintenance: Mark the WordPress core plugin_locale filter as an intentional unprefixed hook
1.5.2
- Security: Add direct-access protection to executable PHP files
- Security: Validate and unslash request values, enforce nonces and capabilities for protected actions
- Security: Prepare dynamic database queries and allowlist list-table sorting and bulk operations
- Security: Escape frontend and administration output according to HTML, attribute, URL and style context
- Security: Validate remote email-template URLs and retrieve them through the WordPress HTTP API
- Compatibility: Remove PHP string helpers unavailable on the declared WordPress baseline and use WordPress-aware date handling
- Reliability: Correct sample schedule installation formats, default color values and schedule defaults
- Reliability: Fix time-slot initialization, weekday rendering, exception edit links and several malformed or duplicated form controls
- Maintenance: Normalize line endings, resource versions, footer loading, translation comments and plugin text domains
- Maintenance: Consolidate permanent data removal in uninstall.php and remove all plugin roles, capabilities, options, calendar tokens and tables
1.5.1
- Fix: Keep booking dialogs visible and scrollable on narrow Android screens
- Troubleshooting: If forms are blank after an update, clear browser cache and site data (including cookies), then reload
- Improvement: Add a responsive CSV import with validation and progress feedback
- Reliability: Support long rows and UTF-8 BOM; fix upload validation and field mappings
- Documentation: Add administration help for lists, forms, CSV, previews, templates, resources, time slots and exceptions
- Documentation: Add practical shortcode examples to the schedule settings
- Improvement: Make the monthly week picker optional with
monthpicker="true"; the default uses the week field and date range
- Improvement: Add contextual schedule help and a copyable shortcode reference
- Documentation: Share shortcode defaults between frontend and administration help
- Feature: Show one or two consecutive weeks with the
weeks shortcode attribute
- Feature: Select weeks from a compact, AJAX-powered monthly overview
- Feature: Export bookings as iCalendar files or subscribe through a secret calendar URL
- Calendar: Include recurring bookings, recurrence exceptions, courts, details and contact data
- Privacy: Restrict calendar management to occupancy managers and allow subscription tokens to be reset
1.5.0
- Documentation: Complete the description, feature overview, shortcode usage and installation instructions
- Improvement: Keep fixed time-slot labels readable in the first schedule column
- Improvement: Show each day's date below the weekday in the weekly print view
- Improvement: Navigate between schedule periods without reloading the complete page
- Improvement: Load frontend dialog markup only when requested via AJAX
- Fix: Preserve an existing booking ID in AJAX edit dialogs to prevent self-conflicts
- Fix: Complete AJAX rendering for frontend booking and details dialogs
- Fix: Keep frontend dialog behavior consistent for guests and logged-in users
- Fix: Detect booking conflicts for edits, enclosing time ranges and recurring bookings
- Fix: Show the actual server error when a frontend booking cannot be saved
- Security: Enforce capabilities and nonces for all backend write actions
- Security: Restrict frontend booking updates, moves and deletes to authorized users
- Security: Validate booking plans, dates, times, courts, booking windows and colors server-side
- Security: Escape stored booking data and configuration before frontend output
- Privacy: Show the booking dashboard widget only to occupancy managers
1.4.20
- Fix: Import CSV => Set of correct court number
- Fix: Select correct plan tab
- Tested with WordPress version 7.0
- New Feature: Booking window - Number of days in advance that an booking can be booked
1.4.19
- Fix: Correct check for number of courts
1.4.18
- Fix: Delete of block exceptions
- Tested with WordPress version 6.9.4
- Improvements to the block table => Changed from POST to GET
1.4.17
- Fix: CSV Import of schedules and blocks
- Tested with WordPress version 6.9.1
1.4.16
- Fix: Display of the correct week when the first week begins in the previous year
Earlier versions
Release notes before version 1.4.16 are available in
changelog.txt.