Description
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
* German translation files and WordPress localization support
Usage
Create a schedule in Occupancy Plan in the WordPress administration area. The schedule ID is shown in the schedule overview. Add the shortcode to a page or post:
[occupancy_plan id="1"]
The id attribute is required. The following optional attributes are supported:
mode:daily,weekly,monthlyoryearly(default:weekly); useweekly!to force the weekly view even with many sub-courtsweekdays: visible weekdays as digits from1(Monday) to7(Sunday), for example12345showheader: set tofalseto hide the frontend navigation headershortweekdays: set totrueto use abbreviated weekday namesweeks:1or2consecutive weeks in weekly mode (default:1); navigation advances by one weekmonthpicker: set totrueto replace the week field and date range with the compact monthly week picker (default:false)calendar: set totrueto show protected iCalendar actions to occupancy managerscolumns: number of month columns in the yearly view (default:3)
Examples:
[occupancy_plan id="1" mode="weekly" weekdays="12345" shortweekdays="true"]
[occupancy_plan id="1" mode="weekly" weeks="2" monthpicker="true" calendar="true"]
[occupancy_plan id="1" mode="daily"]
[occupancy_plan id="1" mode="yearly" columns="3"]
SUPPORT
The plugin is continuously developed and supported. Please send support inquiries by email to support@software-kunze.de.
Screenshots






Installation
- Upload the plugin ZIP through Plugins > Add New > Upload Plugin, or copy the
occupancy-planfolder to/wp-content/plugins/. - Activate Occupancy Plan in the WordPress plugin list.
- Open Occupancy Plan in the administration area and create or configure a schedule.
- Configure courts, time slots, booking permissions, email notifications and optional approval settings.
- Insert
[occupancy_plan id="1"]into a page or post and replace1with the ID of your schedule.
Reviews
Contributors & Developers
“Occupancy Plan” is open source software. The following people have contributed to this plugin.
Contributors“Occupancy Plan” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Occupancy Plan” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
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
weeksshortcode 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.
