Step-by-step installation and management guide for ReservePress Salons (Plugin v1.2.27 & Theme v1.2.9) — covering service categories, stylist working hours, the 6-step appointment booking widget, gratuity presets, Stripe payments, and the Front Desk interface.
Before installing ReservePress Salons, confirm your server meets the following requirements: Requirement
Minimum
WordPress
PHP
MySQL / MariaDB
MySQL 5.7+ or MariaDB 10.3+
HTTPS
Required for Stripe payments (strongly recommended for all installs)
Pretty Permalinks
Must be enabled — Settings → Permalinks → any option except Plain
WP Memory Limit
128 MB minimum; 256 MB recommended
Optional: Stripe Account
Required only if you want to collect online payments or deposits. Not required for pay-in-salon (cash/card on arrival) workflows.
/wp-content/plugins/ via FTP or your host's file manager.The plugin automatically creates 8 custom database tables prefixed with wp_rpsal_ (or your configured prefix). Custom capabilities are added to the Administrator role. No existing WordPress data is modified.
wp_rpsal_serviceswp_rpsal_service_categorieswp_rpsal_staffwp_rpsal_staff_hourswp_rpsal_appointmentswp_rpsal_clientswp_rpsal_promotionswp_rpsal_blocked_timesNote on the service_categories table
The wp_rpsal_service_categories table includes an image_id column, added automatically via migration on first activation. This stores the WordPress media library attachment ID for the category's cover image.
Follow these steps in order after activating the plugin. Completing each step before the next ensures the booking widget works correctly from day one.
Go to RP Salons → Settings. The Settings screen is organised into tabs — open the Salon tab first and fill in:
Go to RP Salons → Services & Categories and click Add New Category. This opens a full-page form. Fill in:
Images are pulled directly from the WordPress media library and do not require any additional configuration. Recommended image size: 800 × 600 px or larger (landscape orientation). The ReservePress Salons theme automatically crops and displays category images on the homepage cards and the Services page.
Go to RP Salons → Services & Categories and click Add New Service. This opens a full-page form. Fill in:
At least one active service must exist before the booking widget will load correctly. Services with Status set to Inactive are hidden from the public but remain in the database.
Go to RP Salons → Staff and click Add New Staff Member. This opens a full-page form. Fill in:
Go to RP Salons → Staff, click a staff member's name, then click Set Hours. Configure working days and time ranges for each day of the week. The booking widget only shows available slots within these hours.
Staff with no hours configured will show no available slots in the booking widget. Hours apply to the staff member's local timezone as configured in WordPress Settings → General.
Create the following pages in WordPress → Pages → Add New. The slug (URL) must match exactly for the plugin's links to work correctly.
Page Title
Slug
Content / Notes
Book Appointment
book-appointment
Add shortcode [rpsal_booking_widget] or use Booking Page template (ReservePress Salons theme).
My Appointments
my-appointments
Add shortcode [rpsal_my_appointments]. Guests access via email link; logged-in users see their bookings automatically.
Services
services
Add [rpsal_services] shortcode or use Services Page template (ReservePress Salons theme).
After creating pages, go to RP Salons → Settings → Salon and update the My Appointments URL field with the full URL of your My Appointments page.
All shortcodes can be added to any WordPress page, post, or widget area. They automatically enqueue the required CSS and JavaScript. No additional setup is needed beyond placing the shortcode in your content.
[rpsal_booking_widget]
[rpsal_booking_widget service_id="3"]
[rpsal_booking_widget staff_id="2" title="Book with Sarah"]
The primary booking shortcode. Renders a fully interactive 6-step booking flow:
Attribute
Default
Description
service_id
0
Pre-select a service by ID. Widget skips Step 1 if set.
staff_id
0
Pre-select a staff member by ID. Widget skips Step 2 if set. Also used by the ?staff_id=X URL parameter (see below).
title
Book an Appointment
Heading displayed at the top of the widget.
The ReservePress Salons theme's About page includes a “Book with [Name]” button on each staff card. This button links to the Book Appointment page appending ?staff_id=X to the URL (e.g. /book-appointment/?staff_id=3). The booking widget detects this parameter automatically and pre-filters to show only that staff member's services, skipping the stylist selection step. You can replicate this behaviour on any page by adding ?staff_id=X to any link pointing to your booking page.
[rpsal_services]
[rpsal_services columns="2" category_id="1"]
[rpsal_services show_price="false" show_book_button="true"]
Displays a responsive grid of active services with name, price, description, and a Book Now button. When using the ReservePress Salons theme, the Services page uses category images as section headers and lists individual services with price and duration underneath each category.
Attribute
Default
Description
category_id
0
Filter by service category ID. Shows all categories if omitted.
columns
3
Number of columns in the grid (1–4).
show_price
true
Show or hide the service price.
show_book_button
true
Show or hide the Book Now button.
[rpsal_service id="5"]
Displays a single service by its ID — name, description, duration, and price. Useful for dedicated service landing pages.
Attribute
Default
Description
id
0 (required)
The ID of the service to display. Find IDs in RP Salons → Services & Categories.
[rpsal_staff]
[rpsal_staff columns="4"]
Displays all active staff members in a grid with photo, name, bio, and a Book with Me button. When using the ReservePress Salons theme, the About page renders staff cards with a rounded photo, border, shadow, and padded layout.
Attribute
Default
Description
columns
3
Number of columns in the grid.
[rpsal_my_appointments]
Displays a client's appointment history. Behaviour depends on login status:
This shortcode requires the My Appointments page to be created and its URL saved in RP Salons → Settings → Salon. Without this, the confirmation email's View My Appointments link will not work.
[rpsal_promotions]
Displays all currently active promotions with their discount code, description, and validity. Promotion codes can be entered by clients during the booking checkout step.
[rpsal_availability_calendar service_id="1"]
[rpsal_availability_calendar service_id="1" staff_id="2"]
Displays a read-only month calendar highlighting available dates for a given service and optionally a specific staff member. Useful on service or staff landing pages. Attribute
Default
Description
service_id
0 (required)
The service to check availability for.
staff_id
0
Optionally restrict to a specific staff member.
The RP Salons menu appears in the WordPress admin sidebar (look for the scissors icon ✂). It contains the following sections:
This screen lists all services and categories. All management uses full-page forms — there are no modal pop-ups or inline editors.
This screen lists all staff members. All management uses full-page forms.
[rpsal_promotions] shortcode.All settings are at RP Salons → Settings. The settings screen is divided into seven tabs. Each tab saves independently — click Save Settings within each tab.
Setting
Description
rpsal_salon_name
Your salon name — appears in email notifications and the booking widget.
rpsal_salon_email
Reply-to email address for all client-facing emails.
rpsal_salon_phone
Salon phone number — included in confirmation emails.
rpsal_theme_style
auto = inherit active theme CSS variables. off = always use plugin default colours.
rpsal_my_appts_url
Full URL of the My Appointments page. Required for email confirmation links.
Setting
Description
rpsal_min_advance_hours
Minimum hours in advance a client can book. Default: 2.
rpsal_max_advance_days
How far ahead clients can book. Default: 60 days.
rpsal_slot_interval
Interval between time slots shown in the widget. Default: 30 minutes.
rpsal_cancellation_hours
Hours of notice required for cancellation.
rpsal_allow_guest_booking
Allow bookings without a WordPress account. Recommended: on.
rpsal_require_phone
Make the phone field required at checkout.
Setting
Description
rpsal_gratuity_enabled
Show a gratuity/tip selector at checkout. Only available when Stripe is enabled.
rpsal_gratuity_presets
Comma-separated tip percentages shown as quick-select buttons. Default: 15,18,20.
rpsal_gratuity_default
Pre-selected tip percentage. Leave blank for none.
Setting
Description
rpsal_payment_mode
full = charge full amount at booking. deposit = charge deposit only. none = pay in salon.
rpsal_stripe_enabled
Enable Stripe payment processing.
rpsal_stripe_test_mode
on = use test API keys. off = use live keys.
rpsal_stripe_pub_key_live
Stripe live publishable key (starts with pk_live_).
rpsal_stripe_secret_live
Stripe live secret key (starts with sk_live_). Never share this key.
rpsal_stripe_pub_key_test
Stripe test publishable key (starts with pk_test_).
rpsal_stripe_secret_test
Stripe test secret key (starts with sk_test_).
rpsal_stripe_webhook_secre t
Stripe webhook signing secret (starts with whsec_). Required for payment confirmation.
Setting
Description
rpsal_tax_enabled
Apply tax to service prices at checkout.
rpsal_tax_rate
Tax percentage (e.g. 13 for 13% HST).
rpsal_tax_name
Label shown at checkout (e.g. HST, GST, VAT).
rpsal_tax_inclusive
on = prices already include tax. off = tax added on top.
Setting
Description
rpsal_currency
ISO currency code. Default: CAD.
rpsal_currency_symbol
Symbol displayed with prices. Default: $.
rpsal_currency_position
before = $10.00. after = 10.00$.
rpsal_currency_decimals
Number of decimal places. Default: 2.
Setting
Description
rpsal_email_from_name
Sender name for all plugin emails.
rpsal_email_from_address
Sender email address.
rpsal_email_confirmation
Send a confirmation email to the client after booking.
rpsal_email_admin_notify
Send a notification email to the admin/salon when a new booking is made.
rpsal_email_reminder
Send a reminder email before the appointment.
rpsal_email_reminder_hours
Hours before the appointment to send the reminder. Default: 24.
rpsal_email_cancellation
Send a cancellation notice to the client.
rpsal_smtp_host
SMTP server hostname (e.g. mail.reservepress.ca).
rpsal_smtp_port
SMTP port. Common values: 587 (TLS), 465 (SSL).
rpsal_smtp_username
SMTP account username.
rpsal_smtp_password
SMTP account password.
rpsal_smtp_encryption
tls or ssl.
WordPress default email (wp_mail) is often blocked by hosting providers. Use a dedicated SMTP account or transactional email service for reliable delivery. Enter your SMTP host, port, username, password, and encryption type in the fields above. Both client confirmation emails and admin notification emails are sent via these SMTP settings.
ReservePress Salons adds custom capabilities to the WordPress role system. Administrators receive all capabilities automatically on activation. You can assign individual capabilities to other roles using a role management plugin such as User Role Editor.
Capability
Description
Admin
Manager*
Recept.*
manage_rpsal_appointments
View, create, edit appointments
✓
✓
✓
edit_rpsal_appointments
Edit existing appointments
✓
✓
✓
delete_rpsal_appointments
Delete appointments
✓
✓
manage_rpsal_services
Manage services and categories
✓
✓
edit_rpsal_services
Edit service details
✓
✓
manage_rpsal_staff
Manage staff members and hours
✓
✓
manage_rpsal_settings
Access plugin settings
✓
✓
view_rpsal_reports
View revenue and booking reports
✓
✓
view_rpsal_calendar
View the calendar screen
✓
✓
✓
access_rpsal_frontend
Access the Front Desk interface
✓
✓
✓
* Manager and Receptionist are not created automatically. Assign capabilities to existing roles using a role editor plugin.
The Front Desk is a dedicated interface designed for in-salon use — reception tablets, front desk computers, or any staff-facing screen. It is separate from the WordPress admin and accessible at: https://yoursite.com/?rpsal_front_desk=1
The interface includes:
The Front Desk interface requires the access_rpsal_frontend capability. Administrators have this by default. Assign it to receptionist or manager roles as needed.
The plugin sends the following emails automatically. All emails are sent via the SMTP settings configured in RP Salons → Settings → Email.
Trigger
Recipient
Booking Confirmation
Immediately after a successful booking
Client
Admin Notification
Immediately after a successful booking
Salon admin email
Appointment Reminder
N hours before the appointment (configurable)
Client
Cancellation Notice
When an appointment is cancelled
Client
Reminder emails require a WP-Cron job to fire. On most shared hosts this works automatically. For high-traffic or mission-critical reminders, configure a real cron job on your server: */5 * * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null
Step 1: Create a Stripe Account
Go to stripe.com and create or log in to your account. Complete business verification if required for live payments.
Step 2: Get Your API Keys
In the Stripe dashboard, go to Developers → API Keys. Copy your Publishable key and Secret key. Start with test mode keys (pk_test_… and sk_test_…) for initial setup.
Step 3: Enter Keys in Plugin Settings
Go to RP Salons → Settings → Payment. Enable Stripe and check Test Mode. Paste your test keys into the Test Publishable Key and Test Secret Key fields. Save settings.
Step 4: Set Up Webhook
In Stripe dashboard go to Developers → Webhooks → Add Endpoint. Endpoint URL: https://yoursite.com/wp-json/rpsal/v1/stripe-webhook. Select events: payment_intent.succeeded and payment_intent.payment_failed. Copy the Signing Secret and paste it into the Stripe Webhook Secret field in plugin settings.
Step 5: Test a Payment
Make a test booking on your site. Use Stripe test card 4242 4242 4242 4242 with any future expiry and any CVC. Confirm the booking appears in RP Salons → Appointments with payment status Paid. When ready for live payments, switch off Test Mode and replace with live API keys.
Never paste your Stripe secret key anywhere public or in version control. The webhook secret prevents fraudulent payment confirmation requests. HTTPS is required for Stripe to function on live sites.
The ReservePress Salons Theme (v1.2.9) is the official companion theme for ReservePress Salons. It is designed to work out of the box with the plugin — no manual shortcode setup required for the Booking or Services pages.
Page Title
Slug
Template
Home (set as front page)
/
Front Page
Services
services
Services Page
About
about
About Page
Gallery
gallery
Gallery Page
Contact
contact
Contact Page
Book Appointment
book-appointment
Booking Page
FAQ
faq
FAQ Page
Go to Appearance → Customize to change the hero image, CTA text, about section image, and other theme options. Contact and address details in the footer are edited via the Customizer.
ReservePress Salons Theme Lite is a minimal booking shell included free with every ReservePress Salons purchase. It is designed for salons whose main website runs on a non-WordPress platform such as Shopify, Squarespace, or Wix — where you need a clean, branded booking experience without building a full WordPress site.
Install WordPress in a subfolder of your domain (e.g. yourdomain.com/book/). Theme Lite turns that subfolder into a self-contained booking portal — nothing more. Visitors who land on your booking URL see only the booking form and a confirmation/appointments page. The header shows your logo, which links back to your main site.
Go to Appearance → Customize. Theme Lite exposes four options only: Option
Description
Logo
Upload your salon logo. Displayed in the header, links back to your main site.
Primary Colour
Accent colour applied to buttons and highlights in the booking widget.
Main Site URL
The URL your logo links to (e.g. https://yourdomain.com).
Footer Copyright
Copyright line displayed in the footer.
Theme Lite has no navigation menu, no homepage, and no marketing content. It is intentionally minimal — a booking shell only. For a full salon website experience with a homepage, services page, staff profiles, gallery, and FAQ, use the ReservePress Salons Theme (Chapter 11).
Booking widget shows “Online booking is coming soon”
[rpsal_booking_widget] (not [rpsal_booking]).Services page shows “No services found”
[rpsal_services] is placed in the page content.[rpsal_services] shortcode.For additional help, feature requests, or to report a bug, visit reservepress.ca or contact us at hello@reservepress.ca.
ReservePress Salons is open source software licensed under the GNU General Public License v2 or later.