This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Book a Room


** IMPORTANT! A recent update requires to deactivate and reactivate the plugin to create a new Capability called bookaroom_admin. This will also apply it to Administrators. You can create a Role or apply this Capability to any other users who need access to the Book a Room admin menues and functions.**

Note: You need the Book a Room Event Calendar plugin to view the Event Calendar.

Backup before updating to 2.0 and above.

Commercial event calendars can be expensive, confusing for both staff and patrons, and are generally developed with businesses, not libraries, in mind.

We wanted to develop a system that is designed for libraries!

The meeting room system we developed and use was designed in-house by our marketing team and coded by our staff developer over the course of about a year. It has improved our workflow, lessened staff stress and frustration, minimized mistakes, and has made our staff and patron’s experience a better and more pleasant one.

Here are a few things we thought about in tackling this project:

  • Time
    • Whether you’re spending your precious off-the-floor time trying to make sense of yesterday’s meeting room requests, trying to contact today’s reservations after the power (and internet) went out, or are helping a patron sign up over the phone, any unnecessary or excessive time spent dealing with your meeting room system is time away from your other patrons. We started fresh and looked at what we needed as a multiple-branch library system instead of trying to make a cure-all for every situation. Because of this, we were able to simplify our workflow by saving time on managing requests. We also simplified the public forms so that staff spends little to no time handling the questions and problems that a more complex system can create.
  • Price
    • Since the setup and yearly fees of commercial systems can cost tens of thousands of dollars, we wanted to develop our own system that would be free (outside of our developer’s time). We knew from the start that if we could get it to work we wanted to share it with other libraries (or anyone interested) by making it open source and submitting it to the Word Press plugin repository, once we felt we had a finished project. We wanted to make sure that it would be easy to set up, simple to use, and provide a few workflow optimizations to save staff time. Our choice of platform had to be WordPress, an open source and free blogging platform that is one of the most used platforms available; it has a vast amount of plugins, tutorials, themes, and technical support forums available for free online. They also have a great online reference for plugin coding that is always up to date.
  • Bells and/or Whistles
    • Since we had used other systems for years, we had grown to know what had been causing the bottlenecks in our workflow. We made the public forms easier so staff spend almost no time answering customer questions or fixing mistakes. We simplified the management so that creating, approving, and editing reservations and events is more intuitive. Since it’s a WordPress plugin, it uses your own user accounts and doesn’t need to be themed separately from your site.
      In addition to simplifying our forms, management console, and installation, we added some things that would save addition time, as well as help during a crisis. Daily meetings can be pulled up instantly by date and printed or emailed directly from the page with one click. Lists of contact information for any day’s reservations can be pulled up and printed by date quickly and easily. Our forms have error checking that displays the error messages prominently and in English, not error codes. You can even quickly print out room signs that you can tape to your doors.


  • The available rooms list is generated dynamically.

  • The forms are Responsive and easy to use.


Installation requires a few, simple steps after you have initially installed the plugin. You can configure further but these are the simplest things you can do to get things running.

  • Create a page for Reservations and a page for the Event Calendar.
    • On the Meeting Room Page, the content should be the shortcode [meetingRooms]
    • On the Event Calendar (which can run on another sub-domain), use the shortcode [showCalendar]
  • Enter the page URLS.
    • Go to Meeting Room Settings > Settings.
    • Add the URL for your Meeting Room page and Event Calendar pages in the appropriate boxes.
    • Add everything after your site’s URL including a trailing and leading slash. For instance, if your Meeting Room page is, then you would enter /reserve-a-meeting-room/ into the form.
    • If you are hosting the event calendar on a separate page, please use the complete URL in the Event Calendar box.
  • Enter an Email into the Default Email for Daily reservations.
    • This email will be the default on the daily reports.
  • Enter pricing.
    • Enter the deposit and per increment costs for profit and non-profit rooms.
  • Create some amenities.
    • If you have amenities available, go to the Amenities Admin and create a new amenity. Things that are checked ‘Reservable’ would be items that can be brought into the room like a TV, Blu-Ray player or Whiteboard. Things that always in the room, like a sink, microwave, fridge or PA system would not have to be reservable.
  • Create a branch
    • Go to Meeting Room Settings > Branch Admin.
    • Add a branch.
      • You must fill in a name, address and map link.
      • Make sure that Available to the public is checked.
      • If you want to be able to schedule events that don’t have a specific room, check Has ‘No Location’
      • For a closed day, do not enter hours. Otherwise, enter start and closing times for the branch.
  • Create a room.
    • Rooms are actual, physical spaces. Create one for each space, even if you can partition rooms together to form a larger room.
    • Go to Meeting Room Settings > Room Admin.
    • Click Create a new room.
    • Enter the room name, select the branch and choose any amenities, then submit.
  • Create a room container.
    • Room Containers are reservable spaces and are made up of one or more rooms. If you have a Room A and a Room B, but can also turn them into one large meeting room, you would make 3 containers. One for Room A, one for Room B and one containing both.
    • Go to Meeting Room Settings > Containers Admin.
    • Click Add a new container next to the name of the branch you want this room container to reside.
    • Enter a container name. This can be simple, like “Room A”, or more descriptive, like “Room A & B” or “John Doe Room” if the area is named.
    • Enter the max occupancy.
    • Clicking public means that this room is available to be reserved by the public, not just for staff events.
    • Clicking Hide on daily? will remove it from the daily schedules. This is useful for staff reservable areas like art galleries and display cases that you want to track but not take up space on daily reports or signs.
    • Choose at least one room to be inside the container.
  • Misc. data.
    • you will need to enter appropriate email addresses and customize the emails on the Email Admin page.
    • You will need to enter your meeting room contract on the Content Admin page.
    • If you have any closings for holidays or other reasons, you can enter them on the Closing Admin screen.
  • Configure the Event Calendar plugin.
    • Go to Settings > Event Settings. This is in the regular WordPress settings options.
    • Create a random security key. I usually just mash the keyboard.
    • Enter the database information from the site that you installed the main Book a Room plugin.

This is the minimum required to get the plugin up and running. You can get more information about other settings and features in the rest of this documentation.


How does the “Reserve Buffer” work?

If today was the 1st of the month and you put a 0 in the reserve buffer, the public, who aren’t logged into the site, can reserve rooms at any time after the current time (so nothing in the past).

If you put in a 1, then today is out, but they can reserve all day tomorrow and beyond.

If you put in a 2, then they can’t reserve on the 1st or 2nd, but they can on the 3rd, etc.

Do I need to run both plugins?

No. The Event Calendar plugin just shows the event calendar. All of the configuration and work is done in this main plugin. We separated them in case you want to install the public facing Event Calendar on a separate subdomain or host.

Where can I get the Event Calendar plugin?

You can get it on the WordPress Repository at the following link.


আগষ্ট 10, 2018
I’m busy testing this plugin to see if it fits what I need. It looks great so far. Some minor glitches, however considering that it has one developer, and is a fairly new plugin, it’s pretty amazing. Developer is active in fixing issues, which is another reason to choose this plugin. I need this plugin for a venue that needs to book rooms. I trialled lots of alternatives. Some people suggested using event plugins, where the user can book events, but these didn’t fit my use-case. Book a Room is the best solution for me.
ছেপ্টেম্বৰ 27, 2017
We are moving from a static calendar so this will be a dramatic upgrade. Looks like only a few tweaks here and there to convert from a library to a church and this is a very responsive developer!
এপ্ৰিল 5, 2017
This is the ONLY room booking plugin I can find that supports rooms that have a movable partition wall to create separate spaces. I’ve not got it working 100% to my satisfaction yet, but I’m sure with a few modifications I will get there.
নৱেম্বৰ 15, 2016 3 replies
With a few PHP modifications I was able to convert this into a really nice system for booking study rooms and meeting rooms in a college department. I had tested multiple other booking plugins for WordPress, but this was by far the best starting point. Developer could, and should, easily make it more generic and include more options in backend – for example, approve bookings by default (I has to this by modifying an SQL query, which I would have preferred no to be doing). Great plugin, but could be more friendly to non-developers.
ছেপ্টেম্বৰ 23, 2016
Hi, Just wanted to thank you for a really nice Book a Room plugin. Just what our community centre website needs and I’m sure with any positive feedback the updates and fixes will make it a great asset to any website. Many thanks, Captbdel2
ছেপ্টেম্বৰ 3, 2016
This is exactly what we needed to schedule classes and reserve conference rooms. So many of the other programs were too cumbersome for our basic needs. This was perfect and the response time from the developer was phenomenal!
Read all 7 reviews

Contributors & Developers

“Book a Room” is open source software. The following people have contributed to this plugin.


Translate “Book a Room” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • BUGFIX: Fixed problems with errors on variables that weren’t set yet on the Add Container page.


  • BUGFIX: Fixed a few count() calls that were erroring out on empty.
  • BUGFIX: Changed the wp_enqueue_script to make jQuery work properly.
  • BUGFIX: Fixed a problem with a count() call in the Cities management template that was throwing an error if you had no cities entered (PHP 5 > 7 issue)


  • BUGFIX: Fixed problems with errors on variables that weren’t set yet on the Add Branch page.
  • BUGFIX: Fixed problems with errors on variables that weren’t set yet on the Add Room page.


  • BUGFIX: Fixed update routine for database.


  • BUGFIX: Changed some functions to be PHP8 compatible.


  • BUGFIX: Added missing column


  • BUGFIX: Fixed the create_function depreciated error.


  • BUGFIX: Registration and Max registration bug fixes in the sanity checking.
  • BUGFIX: Changed to using the WordPress wp_mail() function instead of the PHP mail() function.
  • NEW: Added Registration Contact Type option to the reg form.
  • NEW: Added the ability to force a user to click on “check boxes” in the contract content so that you can add “rules” that must be agreed to before continuing.
  • NEW: Added a new Capability called bookaroom_admin that allows you to apply it to a user or Role to restrict access. Administrator is the only Role given this access as first. Please deactivate and reactivate the plugin after updating to create the capability for the first time.

  • One small tweak to the css that got messed up on large screens. (Amenities)


  • Fixed 14 instances of maxlength being typed as maxlengtr.
  • Fixed 2 instances of contactState id being incorrect in inputs.
  • Added style “resize: vertical” to textarea to help on smaller screens.
  • Removed width from textarea css.
  • Removed “display: block” from label css.
  • Added floated divs around radio buttons.
  • Changed inputs to use mobile friendly number/email/tel instead of plain text.
  • Most of the changes fix the display and make things easier when using a mobile device.
  • Thanks to @speedy_snail for all of the assistance!

  • Changed all instances of Event/Organization to Event / Organization to promote better line breaks on smaller screens.

  • Removed a line that was causing a session error after activating, logging out, then loggin back in.

  • Left the new containers but removed the clearfix css as it was causing more issues than it was fixing.

  • Changed public instances of date() to date_i18n() to localize them.

  • Missed one value.

  • In my effort to format my code on the recent changes, a lot of whitespace was added to the form elements. These whitespaces have been removed.

  • Changed the mainForm output for the public form to use output buffering and return the value instead of an return include.


  • Added an outer


div> container to public pages with some CSS to hopefully make things more compatible with certain themes.


  • Changed the INSERT for Events and Meetings to use local time so that it appears correct in the list (as created date).


  • There was an issue with checking if the current user is logged in. Because of this, some days would not allow logged in users to avoid the reserve date limits and would show available times as “*Unavailable”

  • Fixed the drop down when editing a single event so Recurrance setting is on single and won’t throw an error when submitting.

  • Removed error checking for reminders since that part of the form is now hidden.

  • Changed about 38 date() displays to use the date_i18n()
  • Changed several button texts to use _e()

  • Several small bug fixes including a capital _E. Changed the conflict in event scheduling from an “auto” form to a list of links allowing the user to view and manage that conflicting instance in a new tab.

  • Added in error checking for Titles and Descriptions for events and meetings. Any non-ascii characters entered in from Word will throw an error.

  • Attempting to find a bug so I added more granularity to the errors on the submit for Registrations. Adds a new message for all logic errors instead of a single message for all errors.


  • Fixed an error when putting in too high a number for occupancy when requesting a room. This displays properly now.

  • Added a missing php to a <? in \templates\events\eventForm_times.php

  • The date used to create the calendar on the Staff Events page was using the wrong day and was making the calendar look wrong.

  • Fixed a few nested trims() causing an error in PHP 5

  • Email fix was throwing a separate error. THis should be fine now.

  • A couple of the mail functions weren’t adding a “\r\n” after the TO: address, causing the emails to fail. I’ve added it in.


  • Fixed a problem on the daily view as background colors weren’t echoing.

  • Updated last changes to offer comma and semicolons between addresses to allow it to work with Outlook.

  • I added a new feature that allows you to export to clipboard or open an email with every registrant’s address for an event in case you need to contact them.

  • Fixed a naming problem with the isSocial drop down that was causing issues on public events with the City field.

  • Fixed a bug that kept Internet Explorer from ‘Checking All’ on the pending page.

  • Fixed a bug that was stopping the meeting room contract from displaying.


  • Added an option in each branch to hide the social warning.


  • Misplaced end bracket was hiding rooms if there was a no location available.


  • User @christoyor found a bug. I had <? instead of <?php and it was breaking things. Thanks @christoyor!


  • Got the hours error fixed. Non-logged users were having issues becauise of sessions not pulling the data.


  • Changed “)and” and “)or” to “) and” and “) or” in many parts of the code. Hoping this clears errors up with different versions of PHP


  • Fixed incorrectly closed empty() tags around 416 in /templates/events/eventForm_times.php


  • Branch table wasn’t autoincrementing properly, starting at ID 0. For new installs, this was causing an error on the frist branch made.


  • First branches were being ignored since they had an ID of 0. Changed empty() to !isset().


  • Added text domain in for i18n


  • Several small, incremantal bug releases. Major bug was session tracking for logged out users not allowing them to pick times.


  • Finished the initial translation conversion. All templates have been changed from html to dynamic PHP with i19n functions added


  • Continuing work on making Booka Room translatable.


  • I fixed the way that the Reserve Buffer works. If you enter a 0, everything today, after the current time, is available. A 1 means tomorrow is open to reserve. If it’s the 1st and you enter a 2, people can schedule meetings on the 3rd and after, etc.


  • Fixed the meeting room contract popup. I changed the size so it centers better.


  • The setup increments weren’t showing up as unavailable. Setup increments should now work as Unavailable slots before every shift. THis is so that there is a free slot AFTER each meeting to add cleanup increments.


  • Fixed the thin CSS (again) to display the notes field from the last update properly.


  • On the Search Results and Manage Events pages, when you click on a name that has a number by it, it will take you to the notes attached to that person. I’ve added an Edit link at the start of each note to that ticket. I’ve also added code that allows line breaks to work correctly.


  • Added in three options that weren’t being deleted on uninstall. bookaroom_defaultState_name, bookaroom_hide_contract, bookaroom_installing


  • Added an option to hide the meeting room contract.


  • Added in a function that makes phone numbers look easier to read. Will have to modify this in future releases to scrub all non-numeric characters from numbers before entering into DB
  • Got the other event names showing on the list when you edit an event/meeting time.
  • Fixed an extra shift being checked off at the end when you go in to edit a time.


  • Removed the “opening shift” forced setup increment which was causing issues and is uneeded.


  • Replaced a null with array() in bookaroom-meetings-amenities.php:314 to fix a warning when you have no amenities created.


  • Added (int) to line 1313 of bookaroom-meetings-public.php. This fixes the mysterious “unavailable” setup spot.


  • Replaced the jstree javascript libraries. This fixes the issues with the closings page not working for selecting multiple rooms.


  • Added a “parseInt” to the values on the contract popup. The update to Zebra Dialog was ignoring the float values.


  • Removed a “break” in sharedFunctions.php which was throwing an error.


  • Added in a setting and the ability to hide the names of public meetings from the public calendar. When checked, public events on the public calendar show up as “In Use”.
  • Updated Zebra Dialog, used in the contract popup.


  • Fixed empty amenity bug that made amenities in list show up with an empty one and a comma.
  • Added Reply-To Only option and changed email handling. This is so that if you are using an outside email server, you can use reply-to instead of From to help with spam filtering catching “spoofed” emails.
  • Added a forced date format to the datepicker so it shows the correct format for the form.


  • Removed the HTTP protocol from the links to jQuery. This was causing an issue on sites using SSL.


  • This small update stops an error from showing up when you try to schedule an event with a time that starts with a 0 (example 01:00 pm instead of 1:00 pm).


  • Fixed changes from 1.0.22 that were misreporting error times.


  • Added an error message to automatically refortted times.


  • More changes so that simple numeric permalinks work. Fixed issues on small calendar form.


  • More changes so that simple numeric permalinks work. There may be a few remainging problem links, I am huinting them down.


  • Made some changes so that simple numeric permalinks work in calendar.


  • Fixed MySQL FULLTEXT issue with collation that was preventing new installs of the plugin!


  • Searching registrations now also searches exact username (including spaces) so people with short first and last names can be searched.
  • Fixed special characters showing up in the Meeting Room Door Signs and on the public side, when they look at a day to schedule.


  • Fixed some documentation


  • Added a zip code and phone number section to the Locale settings that allows users to put in their own regex to validate.


  • Added a link to the name of the person who requested the room and a number next to their name in the search and Pending lists. If there is a number and you click on their name, you will see a popup of all of their notes from all of their previous requests. This should help make it easier to find problem requesters without having to keep a separate notebook or do multiple searches.


  • Removed unused (and erroring on some systems) encrypt and crypt function definitions.


  • Attempt to fix error from 1.0.11 by changing function definitions to public static in new locale functions.


  • Fixed an error caused by hitting certain admin pages before setting up room containers. Fixes errors similar to * Undefined offset: 1 in ####\book-a-room\bookaroom-events.php on line 5168
  • Warning: Invalid argument supplied for foreach() in ####\book-a-room\bookaroom-events.php on line 5169*


  • Added missing files from a bad commit.


  • Added more “international-friendly” address format.


  • Fixed issue with ranges not being found in Closings.


  • Fixed isSocial warning if undefined. Check to see if it’s empty before compare.


  • Fixed session bug, again
    I used a function that only worked in the latest version of PHP. I replaced it with a method that works in older versions.


  • Fixed session bug
    On some installations, there was a bug that would throw an error when logging out or backing up. This corrects that error.


  • First official release!