{"id":390151,"date":"2026-10-28T12:30:04","date_gmt":"2026-10-28T12:30:04","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/court-planner\/"},"modified":"2026-10-28T12:29:28","modified_gmt":"2026-10-28T12:29:28","slug":"courtora-smart-court-booking","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/courtora-smart-court-booking\/","author":23589835,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.4","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Courtora Smart Court Booking","header_author":"Michael Tews","header_description":"Court reservation system with price rules, series bookings and email notifications.","assets_banners_color":"95bebf","last_updated":"2026-10-28 12:29:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.court-planner.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":63,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"courtplanner","date":"2026-10-28 12:29:28","revision":3770662}},"upgrade_notice":{"2.0.0":"<p>First release in the plugin directory.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3770662,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3770662,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3770662,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3770662,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3770662,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3770662,"resolution":"1","location":"assets","locale":"","width":1280,"height":860},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3770662,"resolution":"2","location":"assets","locale":"","width":1280,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3770662,"resolution":"3","location":"assets","locale":"","width":1500,"height":860},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3770662,"resolution":"4","location":"assets","locale":"","width":1280,"height":500},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3770662,"resolution":"5","location":"assets","locale":"","width":1280,"height":860},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3770662,"resolution":"6","location":"assets","locale":"","width":1280,"height":860},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3770662,"resolution":"7","location":"assets","locale":"","width":1280,"height":900},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3770662,"resolution":"8","location":"assets","locale":"","width":1280,"height":1180},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3770662,"resolution":"9","location":"assets","locale":"","width":1280,"height":860}},"screenshots":{"1":"Booking view with day navigation and court tabs. Free, occupied and own bookings are colour coded.","2":"Booking dialog with price, guest option and payment method.","3":"Multi-day grid view with free, occupied, own and blocked slots. A court that is not bookable is greyed out.","4":"My bookings with cancellation and booking history.","5":"Booking overview in the admin area with filters, export and cleanup of past bookings.","6":"Court settings with price rules for members, guests and member plus guest, and the setup assistant.","7":"Manual booking in the admin area. No limits apply to the administrator.","8":"Recurring booking with conflict handling.","9":"Payment settings with Mollie."}},"plugin_section":[],"plugin_tags":[269,416,246678,722,11932],"plugin_category":[40],"plugin_contributors":[289209],"plugin_business_model":[],"class_list":["post-390151","plugin","type-plugin","status-publish","hentry","plugin_tags-booking","plugin_tags-calendar","plugin_tags-court","plugin_tags-reservation","plugin_tags-tennis","plugin_category-calendar-and-events","plugin_contributors-courtplanner","plugin_committers-courtplanner"],"banners":{"banner":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/banner-772x250.png?rev=3770662","banner_2x":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/banner-1544x500.png?rev=3770662","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/icon.svg?rev=3770662","icon":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/icon.svg?rev=3770662","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-1.png?rev=3770662","caption":"Booking view with day navigation and court tabs. Free, occupied and own bookings are colour coded."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-2.png?rev=3770662","caption":"Booking dialog with price, guest option and payment method."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-3.png?rev=3770662","caption":"Multi-day grid view with free, occupied, own and blocked slots. A court that is not bookable is greyed out."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-4.png?rev=3770662","caption":"My bookings with cancellation and booking history."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-5.png?rev=3770662","caption":"Booking overview in the admin area with filters, export and cleanup of past bookings."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-6.png?rev=3770662","caption":"Court settings with price rules for members, guests and member plus guest, and the setup assistant."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-7.png?rev=3770662","caption":"Manual booking in the admin area. No limits apply to the administrator."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-8.png?rev=3770662","caption":"Recurring booking with conflict handling."},{"src":"https:\/\/ps.w.org\/courtora-smart-court-booking\/assets\/screenshot-9.png?rev=3770662","caption":"Payment settings with Mollie."}],"raw_content":"<!--section=description-->\n<p>Courtora Smart Court Booking lets clubs and sports facilities offer online reservations for courts, rooms or any other bookable resource. It is not limited to tennis.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Booking views as day tabs or as a multi-day grid, for desktop and mobile<\/li>\n<li>Three independent price rule tables: members, guests, and member plus guest<\/li>\n<li>Daily and weekly booking limits, cancellation deadline, booking horizon (weeks in advance)<\/li>\n<li>Recurring bookings (series) with conflict handling: skip, abort or cancel the conflicting booking<\/li>\n<li>Manual bookings in the admin area (no limits apply to the administrator)<\/li>\n<li>E-mail notices for booking and cancellation, with editable templates<\/li>\n<li>Optional online payment with Mollie (PayPal, Wero, Apple Pay, Google Pay, credit card, bank transfer) or cash on site<\/li>\n<li>CSV and Excel export of bookings<\/li>\n<li>Translations: English is the source language. German, French and Spanish are provided through translate.wordpress.org, and everyone can contribute further languages there.<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[ctra_court_booking]<\/code> shows the booking calendar. Attributes: <code>courts=\"1,2\"<\/code>, <code>date=\"2026-06-15\"<\/code>, <code>days=\"3\"<\/code>, <code>view=\"tabs\"<\/code> or <code>view=\"grid\"<\/code>.<\/li>\n<li><code>[ctra_my_court_bookings]<\/code> shows the logged-in user's own bookings with a cancel button.<\/li>\n<\/ul>\n\n<h4>External service: Mollie (optional)<\/h4>\n\n<p>Online payment is optional and disabled until you enter a Mollie API key under Courtora &gt; Settings &gt; Payments. If you enable it, the plugin sends the following data to Mollie (Mollie B.V., Netherlands) when a user pays online: the amount, a payment description (court name, date and time), the return and webhook URLs of your website, the booking ID and the plugin version. Names and e-mail addresses are not sent by the plugin. The payer enters payment details on Mollie's own pages. Mollie also receives the payer's data directly from the payer.<\/p>\n\n<ul>\n<li>Mollie terms: https:\/\/www.mollie.com\/legal\/user-agreement<\/li>\n<li>Mollie privacy statement: https:\/\/www.mollie.com\/legal\/privacy<\/li>\n<\/ul>\n\n<p>Without a Mollie API key the plugin does not contact any external service.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin stores bookings in its own database tables: booking date and time, court, the WordPress user ID or the name and e-mail address of a guest, notes, price and payment status. All data is deleted when the plugin is deleted from the Plugins screen.<\/p>\n\n<p>The plugin supports the WordPress privacy tools. It adds a suggested text to the Policy Guide, includes bookings in the personal data export, and anonymises bookings when personal data is erased or a user is deleted. Future bookings of that person are cancelled without e-mail. Paid bookings are kept for accounting without any link to the person. The privacy text is a suggestion and not legal advice; please review it for your site.<\/p>\n\n<h4>Third-party libraries<\/h4>\n\n<ul>\n<li>Mollie API client for PHP 2.72.0, BSD 2-Clause license (bundled in <code>vendor\/mollie<\/code>)<\/li>\n<li>Select2 4.1.0, MIT license (bundled in <code>assets\/vendor\/select2<\/code>)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>courtora-smart-court-booking<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install the ZIP file under Plugins &gt; Add New.<\/li>\n<li>Activate the plugin. The database tables and default settings are created automatically.<\/li>\n<li>Create your courts and price rules under Courtora.<\/li>\n<li>Set the operator e-mail, cancellation deadline and limits under Courtora &gt; Settings.<\/li>\n<li>Add the shortcode <code>[ctra_court_booking]<\/code> to a page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20have%20to%20use%20mollie%3F\"><h3>Do I have to use Mollie?<\/h3><\/dt>\n<dd><p>No. Online payment is optional. Without it, bookings can be paid on site.<\/p><\/dd>\n<dt id=\"visitors%20see%20old%20data%20or%20old%20buttons%20after%20an%20update.%20what%20should%20i%20do%3F\"><h3>Visitors see old data or old buttons after an update. What should I do?<\/h3><\/dt>\n<dd><p>Clear the cache of your website and of your hosting after every plugin update. Caching plugins and hosting caches can store the booking page and the scripts.<\/p><\/dd>\n<dt id=\"booking%20requests%20are%20cached%20by%20the%20server.%20what%20should%20i%20do%3F\"><h3>Booking requests are cached by the server. What should I do?<\/h3><\/dt>\n<dd><p>Exclude <code>admin-ajax.php<\/code> from caching, or send these headers for it: <code>Cache-Control: no-store, no-cache, must-revalidate, max-age=0, private<\/code> and <code>Pragma: no-cache<\/code>.<\/p><\/dd>\n<dt id=\"which%20limits%20apply%20to%20administrators%3F\"><h3>Which limits apply to administrators?<\/h3><\/dt>\n<dd><p>None. Manual bookings and recurring bookings created in the admin area ignore the limits from the settings. If a booking overlaps an existing one, a dialog asks whether the existing booking should be cancelled.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>First release in the WordPress plugin directory under the name Courtora Smart Court Booking.<\/li>\n<li>Admin scripts and styles are loaded with the WordPress enqueue functions. Select2 is updated to 4.1.0.<\/li>\n<li>All names (database tables, options, hooks, shortcodes, capabilities) use the prefix <code>ctra_<\/code>.<\/li>\n<li>Translations are delivered through translate.wordpress.org.<\/li>\n<\/ul>","raw_excerpt":"Court booking for clubs and sports facilities: online reservations, price rules for members and guests, recurring bookings and e-mail notices.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=390151"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/courtplanner"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390151"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390151"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390151"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390151"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390151"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}