{"id":396263,"date":"2026-11-06T12:49:32","date_gmt":"2026-11-06T12:49:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/marcoplot-booking-service\/"},"modified":"2026-11-06T12:48:58","modified_gmt":"2026-11-06T12:48:58","slug":"marcoplot-booking-service","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/marcoplot-booking-service\/","author":23559295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"MarcoPlot Booking Service","header_author":"MarcoPlot","header_description":"Online booking for personal services: salons, spas, therapists, trainers and more.","assets_banners_color":"f2f4fc","last_updated":"2026-11-06 12:48:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"marcoplot","date":"2026-11-06 12:48:58","revision":3787949}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3787949,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3787949,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3787949,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3787949,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"marcoplot-booking-service\/booking":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"marcoplot-booking-service\/booking","title":"Service booking form","category":"widgets","icon":"calendar-alt","description":"Let customers book online.","keywords":["booking","appointment","reservation"],"textdomain":"marcoplot-booking-service","supports":{"html":false,"multiple":false,"reusable":false},"editorScript":"file:.\/editor.js"}},"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3787949,"resolution":"1","location":"assets","locale":"","width":1280,"height":856},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3787949,"resolution":"2","location":"assets","locale":"","width":1280,"height":1420},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3787949,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3787949,"resolution":"4","location":"assets","locale":"","width":1280,"height":845},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3787949,"resolution":"5","location":"assets","locale":"","width":1280,"height":1386},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3787949,"resolution":"6","location":"assets","locale":"","width":1280,"height":929}},"screenshots":{"1":"The booking page: customers pick a time for the service and staff member they chose.","2":"The booking page: details and payment.","3":"The day schedule, one column per staff member.","4":"A booking with its details, money and payments.","5":"The setup wizard.","6":"Business hours in Settings."}},"plugin_section":[],"plugin_tags":[8132,269,11523,268,11522],"plugin_category":[40],"plugin_contributors":[288984],"plugin_business_model":[],"class_list":["post-396263","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-booking","plugin_tags-salon","plugin_tags-scheduling","plugin_tags-spa","plugin_category-calendar-and-events","plugin_contributors-marcoplot","plugin_committers-marcoplot"],"banners":{"banner":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/banner-772x250.png?rev=3787949","banner_2x":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/banner-1544x500.png?rev=3787949","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/icon-128x128.png?rev=3787949","icon_2x":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/icon-256x256.png?rev=3787949","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-1.png?rev=3787949","caption":"The booking page: customers pick a time for the service and staff member they chose."},{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-2.png?rev=3787949","caption":"The booking page: details and payment."},{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-3.png?rev=3787949","caption":"The day schedule, one column per staff member."},{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-4.png?rev=3787949","caption":"A booking with its details, money and payments."},{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-5.png?rev=3787949","caption":"The setup wizard."},{"src":"https:\/\/ps.w.org\/marcoplot-booking-service\/assets\/screenshot-6.png?rev=3787949","caption":"Business hours in Settings."}],"raw_content":"<!--section=description-->\n<p>MarcoPlot Booking Service is for personal services, where customers book a person's time: hair and nail salons, massage and physical therapy, spas and skin care, barbers, personal trainers, tattoo studios, pet grooming, tutoring, coaching and consultations. Appointments can be at your shop or online.<\/p>\n\n<p>Requires MySQL 5.7 or MariaDB 10.3 or newer.<\/p>\n\n<p>Customers pick a service, a staff member or anyone available, a date and a start time, then pay with Stripe or PayPal, or pay at the shop. You see your team's day on one schedule, one column per staff member, take bookings for customers, and refund to the card or PayPal account from the booking.<\/p>\n\n<h4>For customers<\/h4>\n\n<ul>\n<li>One booking page: service, staff member, date, time, details, payment. Add it with a block or the <code>[mpservice_booking]<\/code> shortcode.<\/li>\n<li>Customers can choose a staff member or No preference. With No preference, the booking goes to the qualified staff member with the least booked time that day.<\/li>\n<li>Start times every 15, 30 or 60 minutes, on the clock.<\/li>\n<li>Only times that really fit are shown: each staff member's working hours, days off, buffer time after a service, notice needed and how far ahead customers can book.<\/li>\n<li>Online appointments show the meeting link and the time in the customer's own time zone.<\/li>\n<li>Customers can book for someone else and enter that person's name.<\/li>\n<li>Each customer gets a page for their booking: see it, add it to their calendar, or cancel it within your rules.<\/li>\n<li>Booking terms the customer agrees to before booking, and a tip note you write yourself.<\/li>\n<li>A country-code picker for the phone number, and an email check that catches domains that can't receive mail and suggests fixes for common typos. A one-time code to the customer's email before they can submit is optional, off by default.<\/li>\n<li>Confirmation, reminder, change, cancellation and refund emails. Edit the subject, opening and closing of each, for example to ask customers to bring a form.<\/li>\n<\/ul>\n\n<h4>For you<\/h4>\n\n<ul>\n<li>Staff: no limit on the number. Each has working hours or follows the business hours, the services they can do, a meeting link for online appointments, and can be Active, Paused or Left.<\/li>\n<li>Services with variants (each with its own duration and price), add-ons, buffer time, and a color on the schedule. A service can have a gap in the middle, such as hair color while it develops, and a shorter booking can fit in the gap.<\/li>\n<li>Schedule by day (one column per staff member), week and month; a searchable list of bookings.<\/li>\n<li>Days off and extra hours for one staff member or the whole shop, a day or part of a day at a time; closed dates for the shop.<\/li>\n<li>Book for customers as staff, change the time, staff member, service, add-ons or price, cancel, mark arrivals and no-shows, and record tips.<\/li>\n<li>Payments by Stripe or PayPal: nothing online, a deposit set on each service, or full payment. Refund rules for deposits and full payments, set by you. Refunds due appear at the top of the Bookings page, where you refund or decline them.<\/li>\n<li>Currency and sales tax: pick from 20 currencies, including ones with no decimal places like the Japanese yen. Add one sales tax rate and name; it shows separately on Stripe receipts and in the PayPal order.<\/li>\n<li>Analytics for sales, tips and how full your team's hours are, by day, week, month or any dates.<\/li>\n<li>A private calendar link for your bookings, to subscribe to in Google Calendar, Apple Calendar or Outlook on your phone.<\/li>\n<li>Customers with total spent, tags and no-shows, and their booking history; email a customer from their page; import customers from a CSV file. Personal data export and erasure through the WordPress tools.<\/li>\n<li>Customer tags: Regular after 5 completed bookings across your MarcoPlot plugins, VIP by hand, and Flagged automatically at a second no-show or by hand.<\/li>\n<li>Notification addresses for new bookings and cancellations, and a notice to send to customers with upcoming bookings.<\/li>\n<li>A setup wizard with a starting point for each kind of business, and a Diagnostics page that checks scheduled tasks, time zone, tables and payments and fixes what it can.<\/li>\n<\/ul>\n\n<h4>Pro<\/h4>\n\n<p><a href=\"https:\/\/marcoplot.com\/service-pro\/\">MarcoPlot Booking Service Pro<\/a> adds rotating shifts, time off for a range of dates, Booking manager, Reception and Booking staff roles, emails and a calendar link for each staff member, business analysis by staff member, automatic refunds on cancellation, peak pricing, coupon codes, review invitations after a visit, and a layout, your logo, header photo, color and footer on customer emails.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to these services only as described here.<\/p>\n\n<h4>Stripe<\/h4>\n\n<p>Used to take and refund payments online, only if you enter a Stripe secret key. When a customer pays, the plugin sends Stripe the amount, currency, a description of the booking (service, date and time), and for a deposit the amount still due at the appointment, the booking ID, the customer's email and the address of the customer's booking page on your site, where Stripe sends the customer back. It then opens Stripe Checkout for the customer. It also asks Stripe for the status of payments and refunds, and checks your key when you save it and each time you open the Diagnostics page while online payments are on. When you save it, and again from time to time, it also reads your Stripe account's country and payment method settings (card, Apple Pay and Google Pay) to show the matching payment marks. If you set a sales tax rate, it also creates and uses a Stripe tax rate so the tax shows separately on the customer's receipt, and when you change the rate it asks Stripe to deactivate the old one (tax_rates\/{id}, active=false). When you cancel a booking that is waiting for payment, when a waiting booking expires and is released, when waiting payments are checked on schedule, when a booking cannot be saved, or when you clear the booking history in the setup wizard, it asks Stripe to close that booking's payment page (checkout\/sessions\/{id}\/expire). When you delete the plugin, it asks Stripe to close any payment pages still open. <a href=\"https:\/\/stripe.com\/legal\/ssa\">Stripe terms<\/a>, <a href=\"https:\/\/stripe.com\/privacy\">privacy policy<\/a>.<\/p>\n\n<h4>PayPal<\/h4>\n\n<p>Used to take and refund payments online, only if you enter PayPal API credentials and switch PayPal on. When a customer chooses PayPal, the plugin sends PayPal the amount and the tax in it, currency, a description of the booking (service, date and time), and for a deposit the amount still due at the appointment, the booking ID and the address of the customer's booking page on your site, where PayPal sends the customer back. The customer then logs in and approves the payment at PayPal. It also asks PayPal for the status of payments and refunds, and checks your credentials when you save or test them and each time you open the Diagnostics page while PayPal is on. When you delete the plugin, it asks PayPal for the status of any payment still waiting. <a href=\"https:\/\/www.paypal.com\/us\/legalhub\/useragreement-full\">PayPal terms<\/a>, <a href=\"https:\/\/www.paypal.com\/us\/legalhub\/privacy-full\">privacy policy<\/a>.<\/p>\n\n<h4>MarcoPlot feedback<\/h4>\n\n<p>Only when you click Send on the Feedback page, the plugin sends marcoplot.com the topic and message you wrote, your reply address if you gave one, which MarcoPlot plugin it came from, the versions of this plugin, its Pro add-on, WordPress and PHP, and the site language. Nothing is sent otherwise. <a href=\"https:\/\/marcoplot.com\/terms\/\">Terms<\/a>, <a href=\"https:\/\/marcoplot.com\/privacy\/\">privacy policy<\/a>.<\/p>\n\n<h4>Email address check<\/h4>\n\n<p>When a customer, or you, enter an email address, the plugin looks up the address's domain (the part after the @) with a DNS lookup on your server's own resolver, to catch mistyped addresses. No third-party service receives the address or the domain from the plugin.<\/p>\n\n<h4>Google Maps<\/h4>\n\n<p>If you enter the shop's address, the customer's booking page links to Google Maps for directions. Nothing is sent until the customer clicks the link. <a href=\"https:\/\/policies.google.com\/terms\">Terms<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">privacy policy<\/a>.<\/p>\n\n<p>The line icons (assets\/icons.svg, the calendar icon on the customer page and the drop-down arrow in the stylesheets) come from Lucide (ISC license, see assets\/icons-licence.txt).<\/p>\n\n<p>The Visa, Mastercard, American Express, Discover, Apple Pay, Google Pay and PayPal badges shown with the payment buttons are trademarks of their respective owners and come from Shopify's payment_icons (MIT license, see assets\/pay-icons-licence.txt).\nThe MarcoPlot logo (assets\/logo.svg and assets\/menu-icon.svg) is the author's own artwork, released with the plugin under the same license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from Plugins &gt; Add New.<\/li>\n<li>The setup wizard opens: what you offer, your business and time zone, business hours, your team and services, and payments. Then it creates the booking page. Every step can be changed later under Service Bookings &gt; Settings, Staff and Services.<\/li>\n<li>To take payments online, choose a deposit or full payment under Settings &gt; Payments, switch on Stripe or PayPal, and enter your Stripe secret key or your PayPal API credentials. Otherwise customers pay at the shop.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20happens%20to%20my%20bookings%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens to my bookings when I delete the plugin?<\/h3><\/dt>\n<dd><p>They stay unless you chose otherwise. Bookings, payment records, customers, staff, services and settings are kept in the database, so installing the plugin again brings everything back. Only the Stripe key, the PayPal credentials and the scheduled tasks are removed.<\/p><\/dd>\n<dt id=\"how%20do%20i%20delete%20all%20the%20data%3F\"><h3>How do I delete all the data?<\/h3><\/dt>\n<dd><p>Go to Service Bookings &gt; Settings &gt; Data and select Delete the data with the plugin. The confirmation lists what will be deleted and offers downloads of all bookings and payments first. Nothing is deleted then: the data goes when you delete the plugin in the usual way on the Plugins page. You can change your mind until then. Only administrators can make this choice.<\/p>\n\n<p>If another MarcoPlot booking plugin is still installed, only this plugin's settings, special dates, Stripe key and PayPal credentials are deleted: customers, bookings and payment records stay until the last MarcoPlot booking plugin is deleted with its data.<\/p>\n\n<p>On a multisite network, each site's administrator makes this choice for their own site. When the network administrator deletes the plugin, each site is handled as its administrator chose; sites that made no choice keep their data.<\/p><\/dd>\n<dt id=\"can%20i%20start%20again%20with%20no%20bookings%20but%20keep%20my%20staff%2C%20services%20and%20settings%3F\"><h3>Can I start again with no bookings but keep my staff, services and settings?<\/h3><\/dt>\n<dd><p>Yes. Run the setup wizard again from Settings and select A new shop. After you confirm, bookings, payment records, tips, emails sent and customers are deleted; staff, services, working hours, settings and payment keys stay. You choose the currency again. If another MarcoPlot booking plugin is installed on this site, all customers are kept.<\/p><\/dd>\n<dt id=\"can%20i%20delete%20a%20single%20booking%20or%20payment%3F\"><h3>Can I delete a single booking or payment?<\/h3><\/dt>\n<dd><p>No. Bookings and payment records are never deleted one by one, so the records always add up. A staff member or service that has bookings can be set inactive instead. To remove a customer's personal details, use the personal data tools under Tools.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20customer%20asks%20to%20have%20their%20personal%20data%20erased%3F\"><h3>What happens when a customer asks to have their personal data erased?<\/h3><\/dt>\n<dd><p>Use Tools &gt; Erase Personal Data in WordPress. The customer's name, email, phone and notes are cleared from the customer record, their bookings and the emails sent to them; with Pro, also the email on coupon uses and review invitations. Amounts stay, so reports still add up. If the customer has a booking that is not over yet, or the Pro add-on is switched off, nothing is erased and the result says why: erase again after the booking, or after switching Pro on.<\/p><\/dd>\n<dt id=\"can%20customers%20change%20the%20time%20of%20their%20booking%3F\"><h3>Can customers change the time of their booking?<\/h3><\/dt>\n<dd><p>No. Customers can cancel within your rules and book again; you can change the time, staff member or service from the booking.<\/p><\/dd>\n<dt id=\"how%20are%20the%20payment%20keys%20stored%3F\"><h3>How are the payment keys stored?<\/h3><\/dt>\n<dd><p>Your Stripe secret key and PayPal secret are stored encrypted. To keep them unreadable from a copy of the database alone, add define( 'MPSERVICE_SECRET_KEY', 'a long random string' ); to wp-config.php before you enter the keys. If you change or remove it later, or move the site without it, enter the keys again.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Let customers book a service and a staff member online, pay a deposit or in full, and run your team's day from one schedule.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396263","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=396263"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/marcoplot"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396263"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396263"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396263"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396263"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396263"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}