INACTIVE NOTICE: This plugin is unsupported by WPMUDEV, we've published it here for those technical types who might want to fork and maintain it for their needs.
Translation files can be found at https://github.com/wpmudev/translations
Let your clients check availability, choose a location, select a service provider, book an appointment and make a deposit on your website.
Get users comfortable with your team before they ever schedule an appointment.
Appointments+ is easy to set up, but there’s more under the hood than you might think! Add an unlimited number of employees, partners and contractors as providers. Give them bio pages and display their schedule so clients can choose a provider that fits their need.
Make services and providers location specific so clients can sort availability by service, time, location and provider.
Our simple 3 click process is configured to allow visitors to set an appointment without forcing visitors to create a user. Your time is valuable. Collect payments or take deposits through PayPal without any additional code or plugins.
Make it easy to take a deposit at confirmation.
Share available time slots and let visitors book appointments.
Appointments + has a super clean front-end interface that works nicely with most any theme. Use a color preset or perfectly match your brand with the color picker. Plus, you can add design tweaks quickly from the included field for additional CSS rules.
Use shortcodes and built-in widgets to quickly list services, providers and calendars where you need them. Plus get over 20 free add-ons that expand functionality.
Administration Permissions
Configure what user roles can manage and access appointments +.
Export Date Range
Choose to export a list of appointments within a specific date range.
HTML emails
Use default plain text emails or layout and send emails with HTML customization.
4 Location Addons
Create appointment locations, integrate Google maps, and tie services and providers to specific locations.
MarketPress Integration
Use any of the MarketPress payment gateways to accept payment for services.
Dynamic Time Slot Adjustments
Tetris mode adjusts time slots dynamically to avoid downtime after breaks or appointments.
Powerful Time Slot Flexibility
Advanced service duration control and add padding time around appointments.
Set Custom Post Types
Use custom post types for provider biographies and service descriptions.
Capture client information by requiring users to login to schedule an appointment. Make it easy with social credentials – allow users to login with their Facebook, Twitter, Google+ or WordPress account.
Both clients and service providers can save appointments made on your site directly to Google Calendar with a click – no setup required. We’ve also included the Google Calendar API. Easily configure Appointments + to automatically sync changes to appointments between Google Calendar and your site.
For help and information on installing plugins you can view our Installing WordPress Plugins Manual. Check out this extensive tutorial on building your first Appointments based site. Or, watch our video tutorial series:
Once you Activate the plugin you will see a menu appear on the Menu Bar labeled Appointments. [
You will see three sub-menus appear when you click on the menu item. We will tackle each separately and in order. [
Clicking Appointments brings you to the hub of your appointments list. You will see that your appointments will be separated by status: Active, Pending, Completed and Removed. You can view each by clicking on their respective links, and each page will show the Client and Service basic info as below. At the top of the page you will see an Add New button, just like you use to create a new page or post. Click that and you can Add a new appointment manually to your calendar. [
The New Appointment Menu is pretty self explanatory. There is a place for the client's infomation, the Service information (that will populate from the menus you fill in later) and a place for notes. Last but not least you can set the status before Saving. There is a built in tutorial that covers this as well, I will show you where to find that, just in-case you have any questions or forget something. [
next up...
Here you will see your transactions if you are taking payments or deposits. These are also grouped: Recent, Pending and Future. Each accessible by clicking their respective links. You cannot manually add a transaction, the plugin will only record what is recorded through PayPal. [
And now the meat of this beast...
The Settings menu will greet you with a Tutorial. You should pay attention to that :) It will tell you what you need to know about setting up the plugin and the tabs you see here. Most are pretty easy to understand and the plugin options are very well annotated, so you should have no trouble. We can pop through and summarize them here, one by one, but I will draw your attention to the FAQ tab first. [
Here is where you will find info on everything you need in this plugin, ready for immediate access! The TWO most important pieces of information on this page, for those who are just installing or learning how to use the plugin, are the two links at the top. These will start (or restart) the tutorials on the Settings menu options and Entering and Editing Appointments. [
Now, let's backtrack. Starting off at the first tab:
These settings are the heart and soul of your setup. Pay special attention to the General Settings box at the top of the page. Especially the Time base value. Time Base the most important parameter of Appointments+. It is the minimum time that you can select for your appointments. Everything time related will work off of this value. The remaining boxes allow you to set your
- Display: create an appointment page, it's display, client information boxes and a place to add Custom CSS.
- Client Accessibility: you can choose whether or not to require login before scheduling
- Payment Settings: choose whether you will accept payments
- Notification Settings: option to set up confirmation and reminder emails for client and/or providers
- Performance Settings: Caching options
[
Set your hours of operation and Break Times. Think Business Hours and 'Out to Lunch'. You can even specify different hours for different service providers. Makes it easy to keep track of differing schedules! [
Days off, holidays, scheduled maintenance, etc. You can add them all here. You can also define working days that are normally non-work days (i.e. a particular Sunday). These are also able to be set per service provider. [
What do you do?! What do you provide?! This is where you lay it all out. Set a capacity, price and even a description page. [
It is not required that you have more than one person available doing what gets done, but if you do, here is where you keep track of them all. You can even add Additional fees and assign more than one service to a provider. Even attach them to a Bio page. Note: this tab will not populate until you have at least one service listed in the Services tab. [
Keep up with what is happening by checking your Logs. This nifty tab is where you will find updates on everything that happens on your site. Status changes, transactions and the like. [
Heaps of Shortcodes for your use. Insert provider or client specific tables, dropdown of services, table for appointment scheduling, monthly views, social login pagination, list all upcoming appointments, PayPal and a couple of parameters for those. You can find a complete documentation of shortcodes below or use the visual shortcode generator.
With Appointments+, we have now added a handy shortcode generator, located above the WordPress text editor in visual mode, that allows you to simply select your requirements for the calendar you wish to display, and then be provided with the exact shortcode to use.
However, some of us still like to do things the old fashioned way, and create our shortcodes by hand, so we have included all of the current shortcodes in this handy guide for your reference and reading pleasure.
Renders a calendar with appointments assigned to a service provider.
status
- Show Appointments with this status (comma-separated list)
- Allowed values: paid, confirmed, pending, completed
- Example: [app_worker_monthly_calendar status=”paid,confirmed”]
_worker_id
_
- Show Appointments calendar for service provider with this user ID
- Example: [app_worker_monthly_calendar worker_id=”32″]
start_at
- Show Appointments calendar for this month. Defaults to current month.
- Example: [app_worker_monthly_calendar start_at=”2013-07-01″]
Creates a weekly table whose cells are clickable to apply for an appointment.
_
title_
- Text that will be displayed as the schedule title. Placeholders START and END will be automatically replaced by their real values.
- Example: [app_schedule title=”Our schedule from START to END”]
Text that will be displayed after the title only to the clients who are logged in or you don’t require a login. - Example: [app_schedule logged=”Click on a free time slot to apply for an appointment.”]
_
notlogged_
- Text that will be displayed after the title only to the clients who are not logged in and you require a login. LOGIN_PAGE will be replaced with your website’s login page, while REGISTRATION_PAGE will be replaced with your website’s registration page.
Example: [app_schedule notlogged=”You need to login to make an appointment. Please click here to register/login: LOGIN_PAGE”]
_
service_
- Enter service ID only if you want to force the table display the service with entered ID.
- Default: “0” (Service is selected by dropdown).
- Note: Multiple selections are not allowed.
- Example: [app_schedule service=”12″]
_
worker_
- Enter service provider ID only if you want to force the table display the service provider with entered ID.
- Default: “0” (Service provider is selected by dropdown).
- Note: Multiple selections are not allowed.
- Example: [app_schedule worker=”15″]
long
- If entered 1, long week days are displayed on the schedule table row, e.g. “Saturday” instead of “Sa”.
- Example: [app_schedule long=”1″]
class
- A css class name for the schedule table. Default is empty.
- Example: [app_schedule class=”my-class”]
_
add_
- Number of weeks to add to the schedule to use for preceding weeks’ schedules. Enter 1 for next week, 2 for the other week, so on. Default: “0” (Current week)
- Example: [app_schedule add=”1″]
_
date_
- Normally calendar starts from the current week. If you want to force it to start from a certain date, enter that date here. Most date formats are supported, but YYYY-MM-DD is recommended.
- Notes: 1) This value will also affect other subsequent calendars on the same page. 2) Date value will not change starting day of week. It is sufficient to enter a date inside the week. Default: “0” (Current week)
- Example: [app_schedule date=”2014-02-01″]
_
require_provider_
- Setting this argument to “1” means a timetable will not be rendered unless a service provider has been previously selected.
- Example: [app_schedule require_provider=”1″]
required_message
- The message that will be shown if service providers are required.
- Example: [app_schedule required_message=”Please, select a service.”]
require_service
- Setting this argument to “1” means a timetable will not be rendered unless a service has been previously selected.
- Example: [app_schedule require_service=”1″]
required_service_message
- The message that will be shown if services are required.
- Example: [app_schedule required_service_message=”Please, select a service.”]
Creates a monthly calendar plus time tables whose free time slots are clickable to apply for an appointment.
title
- Text that will be displayed as the schedule title.
- Placeholders START, WORKER and SERVICE will be automatically replaced by their real values.
- Example: [app_monthly_schedule title=”Our schedule for START”]
logged
- Text that will be displayed after the title only to the clients who are logged in or you don’t require a login.
- Example: [app_monthly_schedule logged=”Click a free day to apply for an appointment.”]
notlogged
- Text that will be displayed after the title only to the clients who are not logged in and you require a login.
- LOGIN_PAGE will be replaced with your website’s login page, while REGISTRATION_PAGE will be replaced with your website’s registration page.
- Example: [app_monthly_schedule notlogged=”You need to login to make an appointment. Please click here to register/login: LOGIN_PAGE”]
service
- Enter service ID only if you want to force the table display the service with entered ID.
- Default: “0” (Service is selected by dropdown).
- Note: Multiple selections are not allowed.
- Example: [app_monthly_schedule service=”12″]
worker
- Enter service provider ID only if you want to force the table display the service provider with entered ID.
- Default: “0” (Service provider is selected by dropdown).
- Note: Multiple selections are not allowed.
- Example: [app_monthly_schedule worker=”15″]
long
- If entered 1, long week days are displayed on the schedule table row, e.g. “Saturday” instead of “Sa”.
- Example: [app_monthly_schedule long=”1″]
class
- A css class name for the schedule table. Default is empty.
- Example: [app_monthly_schedule class=”my-class”]
add
- Number of months to add to the schedule to use for preceding months’ schedules. Enter 1 for next month, 2 for the other month, so on.
- Default: “0” (Current month)
- Example: [app_monthly_schedule add=”1″]
date
- Normally calendar starts from the current month. If you want to force it to start from a certain date, enter that date here.
- Most date formats are supported, but YYYY-MM-DD is recommended.
- Notes: 1) This value will also affect other subsequent calendars on the same page. 2) It is sufficient to enter a date inside the month. Default: “0” (Current month)
- Example: [app_monthly_schedule date=”2014-02-01″]
require_provider
- Setting this argument to “1” means a timetable will not be rendered unless a service provider has been previously selected.
- Example: [app_monthly_schedule require_provider=”1″]
required_message
- The message that will be shown if service providers are required.
- Example: [app_monthly_schedule required_message=”Please, select a service provider.”]
require_service
- Setting this argument to “1” means a timetable will not be rendered unless a service has been previously selected.
- Example: [app_monthly_schedule require_service=”1″]
required_service_message
- The message that will be shown if services are required.
- Example: [app_monthly_schedule required_service_message=”Please, select a service.”]
Inserts pagination codes (previous, next week or month links) and Legend area.
step
- Number of weeks or months that selected time will increase or decrease with each next or previous link click. You may consider entering 4 if you have 4 schedule tables on the page.
- Example: [app_pagination step=”1″]
month
- If entered 1, step parameter will mean month, otherwise week. In short, enter 1 for monthly schedule.
- Example: [app_pagination month=”1″]
date
- This is only required if this shortcode resides above any schedule shortcodes. Otherwise it will follow date settings of the schedule shortcodes.
- Default: “0” (Current week or month)
anchors
- Setting this argument to 0 will prevent pagination links from adding schedule hash anchors.
- Default: “1”
- Example: [app_pagination anchors=”1″]
Inserts a table that displays all upcoming appointments.
title
- Title text.
- Example: [app_all_appointments title=”All Appointments”]
status
- Which status(es) will be included.
- Possible values: paid, confirmed, completed, pending, removed, reserved or combinations of them separated with comma.
- Example: [app_all_appointments status=”paid,confirmed”]
order_by
- Sort order of the appointments.
- Possible values: ID, start. Optionally DESC (descending) can be used, e.g. “start DESC” will reverse the order.
- Default: “start”.
- Note: This is the sort order as page loads. Table can be dynamically sorted by any field from front end (Some date formats may not be sorted correctly).
- Example: [app_all_appointments order_by=”start”]
Inserts a table where client or service provider can see his upcoming appointments.
provider
- Enter 1 if this appointment list belongs to a service provider.
- Default: “0” (client)
- Example: [app_my_appointments provider=”1″]
provider_id
- Enter the user ID of the provider whose list will be displayed. If ommitted, current service provider will be displayed.
- Default: “0” (current service provider)
- Example: [app_my_appointments provider_id=”12″]
title
- Title text.
- Example: [app_my_appointments title=”My Appointments”]
status
- Which status(es) will be included. Possible values: paid, confirmed, completed, pending, removed, reserved or combinations of them separated with comma.
- Allowed values: paid, confirmed, pending, completed, removed, reserved
- Example: [app_my_appointments status=”paid,confirmed”]
gcal
- Enter 0 to disable Google Calendar button by which clients can add appointments to their Google Calendar after booking the appointment.
- Default: “1” (enabled – provided that “Add Google Calendar Button” setting is set as Yes)
order_by
- Sort order of the appointments.
- Possible values: ID, start.
- Example: [app_my_appointments order_by=”ID”]
order
- Sort order of the appointments.
- Possible values: asc (ascendant order), desc (descendant order).
- Example: [app_my_appointments order=”asc”]
allow_cancel
- Enter 1 if you want to allow cancellation of appointments by the client using this table. “Allow client cancel own appointments” setting must also be set as Yes.
- Default: “0” (Cancellation is not allowed).
- Example: [app_my_appointments allow_cancel=”1″]
strict
- Ensure strict matching when searching for appointments to display. The shortcode will, by default, use the widest possible match.
- Example: [app_my_appointments strict=”1″]
Creates a dropdown menu of available services.
select
- Text above the select menu. Default: “Please select a service”
- Example: [app_services select=”Please select a service:”]
show
- Button text to show the results for the selected. Default: “Show available times”
- Example: [app_services show=”Show available times”]
description
- WSelects which part of the description page will be displayed under the dropdown menu when a service is selected .
- Default: “excerpt”
- Allowed values: none, excerpt, content
- Example: [app_services description=”content”]
thumb_size
- Inserts the post thumbnail if page has a featured image.
- Selectable values are “none”, “thumbnail”, “medium”, “full” or a 2 numbers separated by comma representing width and height in pixels, e.g. 32,32.
- Default: “96,96”
- Example: [app_services thumb_size=”thumbnail”]
thumb_class
- css class that will be applied to the thumbnail.
- Default: “alignleft”
- Example: [app_services thumb_class=”my-class”]
autorefresh
- If set as 1, Show button will not be displayed and page will be automatically refreshed as client changes selection.
- Note: Client cannot browse through the selections and thus check descriptions on the fly (without the page is refreshed).
- Default: “0” (disabled). Recommended for sites with a large number of services.
- Example: [app_services autorefresh=”1″]
order_by
- Sort order of the services. Possible values: ID, name, duration, price. Optionally DESC (descending) can be used, e.g. “name DESC” will reverse the order.
- Default: “ID”
- Example: [app_services order_by=”ID”]
worker
- In some cases, you may want to display services which are given only by a certain provider. In that case enter provider ID here.
- Default: “0” (all defined services).
- Note: Multiple selections are not allowed.
- Example: [app_services worker=”12″]
ajax
- If set as 1, Services thumbnails and descriptions will be loaded by AJAX. Recommended for sites with many services
- Example: [app_services ajax=”1″]
Creates a dropdown menu of available service providers.
select
- Text above the select menu.
- Default: “Please select a service”
- Example: [app_service_providers select=”Please choose a service provider:”]
empty_option
- Empty option label for the selection
- Example: [app_service_providers empty_option=”Please, select”]
show
- Button text to show the results for the selected.
- Default: “Show available times”
- Example: [app_service_providers show=”Show available times”]
description
- Selects which part of the bio page will be displayed under the dropdown menu when a service provider is selected .
- Default: “excerpt”
- Allowed values: none, excerpt, content
- Example: [app_service_providers description=”content”]
thumb_size
- Inserts the post thumbnail if page has a featured image.
- Selectable values are “none”, “thumbnail”, “medium”, “full” or a 2 numbers separated by comma representing width and height in pixels, e.g. 32,32.
- Default: “96,96”
- Example: [app_service_providers thumb_size=”thumbnail”]
thumb_class
- css class that will be applied to the thumbnail.
- Default: “alignleft”
- Example: [app_service_providers thumb_class=”my-class”]
autorefresh
- If set as 1, Show button will not be displayed and page will be automatically refreshed as client changes selection.
- Note: Client cannot browse through the selections and thus check descriptions on the fly (without the page is refreshed).
- Default: “0” (disabled)
- Example: [app_service_providers autorefresh=”1″]
order_by
- Sort order of the service providers.
- Possible values: ID, name. Optionally DESC (descending) can be used, e.g. “name DESC” will reverse the order.
- Default: “ID”
- Example: [app_service_providers order_by=”ID”]
service
- In some cases, you may want to force to display providers who give only a certain service. In that case enter service ID here.
- Default: “0” (list is determined by services dropdown).
- Note: Multiple selections are not allowed.
- Example: [app_service_providers service=”12″]
require_service
- Do not show service provider selection at all until the service has been previously selected.
- Example: [app_service_providers require_service=”1″]
Inserts front end login buttons for Facebook, Twitter and WordPress.
login_text
- Text above the login buttons, preceded by a login link.
- Default: “Please click here to login:”
- Example: [app_login login_text=”Please click here to login:”]
redirect_text
- Javascript text if front end login is not set and user is redirected to login page
- Example: [app_login redirect_text=”Login required to make an appointment. Now you will be redirected to login page.”]
Inserts PayPal Pay button and form.
For the shortcode parameters, you can use SERVICE, PRICE, CURRENCY placeholders which will be replaced by their real values.
item_name
- Item name that will be seen on Paypal.
- Default: “Payment for SERVICE” if deposit is not asked, “Deposit for SERVICE” if deposit is asked
- Example: [app_paypal item_name=”Payment for SERVICE”]
button_text
- Text that will be displayed on Paypal button.
- Default: “Please confirm PRICE CURRENCY payment for SERVICE”
- Example: [app_paypal button_text=”Please confirm PRICE CURRENCY payment for SERVICE”]
Inserts a form which displays the details of the selected appointment and has fields which should be filled by the client.
This shortcode is always required to complete an appointment.
title
- Text above fields.
- Default: “Please check the appointment details below and confirm:”
- Example: [app_confirmation title=”Please check the appointment details below and confirm:”]
button_text
- Text of the button that asks client to confirm the appointment.
- Default: “Please click here to confirm this appointment”
- Example: [app_confirmation button_text=”Please click here to confirm this appointment”]
confirm_text
- Javascript text that will be displayed after receiving of the appointment. This will only be displayed if you do not require payment.
- Default: “We have received your appointment. Thanks!”
- Example: [app_confirmation confirm_text=”We have received your appointment. Thanks!”]
warning_text
- Javascript text displayed if client does not fill a required field.
- Default: “Please fill in the requested field”
- Example: [app_confirmation warning_text=”Please fill in the requested field”]
name
- Descriptive title of the field.
- Example: [app_confirmation name=”Your name:”]
- Descriptive title of the field.
- Example: [app_confirmation email=”Your email:”]
phone
- Descriptive title of the field.
- Example: [app_confirmation phone=”Your phone:”]
address
- Descriptive title of the field.
- Example: [app_confirmation address=”Your address:”]
city
- Descriptive title of the field.
- Example: [app_confirmation city=”City:”]
note
- Descriptive title of the field.
- Example: [app_confirmation note=”Your notes:”]
gcal
- Text that will be displayed beside Google Calendar checkbox.
- Default: “Open Google Calendar and submit appointment”
- Example: [app_confirmation gcal=”Access Google Calendar and submit appointment”]