Dog Walking Business documentation

Installation, booking-flow setup, Stripe & subscription configuration, Google Calendar sync, and developer reference. Everything you need to run your business on this plugin.

Getting Started

Install & activate

Dog Walking Business is a standard WordPress plugin — no build step, no Composer required for production.

  1. Download the plugin ZIP from the checkout email or your Freemius account.
  2. WordPress admin → Plugins → Add New → Upload Plugin. Select the ZIP and activate.
  3. On first activation the plugin creates its database tables (customers, pets, appointments, invoices, subscriptions, transactions, and more) and a dwb_customer user role.
System requirements: WordPress 5.8+, PHP 7.4+, MySQL 5.7+/MariaDB 10.3+. Stripe features require a Stripe account (works with test keys too).

First-run checklist

  1. Create your services — Dog Walking → Services → Add. Name, duration, base rate, additional-pet rate.
  2. Create a "My Account" page — add a page containing [dwb_my_account]. Then go to Settings → Dog Walking → My Account page and select it.
  3. Create a booking page — add a page containing [dwb_booking_form].
  4. Connect Stripe — Settings → Payments → paste publishable + secret keys, add webhook secret (instructions below).
  5. Configure email notifications — Settings → Emails → pick which notifications are on, edit templates as needed.
  6. (Optional) Connect Google Calendar — Integrations → Google Calendar → Connect.

Shortcodes

ShortcodeWhat it renders
[dwb_booking_form]Full public booking flow — service picker, date/time, pets, customer fields, Stripe Checkout handoff.
[dog_walking_pricing]Pricing table derived from your active services.
[dwb_my_account]Customer portal (requires login as a dwb_customer user). Upcoming, invoices, pets, profile.
[dwb_contact_form]Rate-limited contact form. Entries land in the admin Contact Entries list.
Core concepts

Services

A service is what a customer books — a 30-minute walk, a full day of daycare, an overnight pet-sit. Each service has:

  • Name + service type (walk, daycare, overnight, etc.) for grouping.
  • Duration (the default time blocked on your calendar).
  • Base rate — the price for one pet.
  • Additional-pet rate — added for each pet beyond the first.
  • Active toggle — hide obsolete services without losing their history.

Pricing model

By default the price for a booking is:

total = base_rate + (additional_pet_rate × (pet_count - 1))

Custom rates can override the base rate and/or additional-pet rate on a per-customer, per-service basis. Set these from the customer's detail page.

Customers & pets

Customers are stored in a dedicated table with name, email, phone, address, and optional house access note (key codes, lockbox, alarm PIN — the stuff you need to remember). Each customer has zero or more pets; each pet tracks species, breed, age, weight, temperament, medical needs, and special instructions.

The customer portal lets your clients update their own pet profiles. When temperament or medical details change, they'll keep it up to date instead of you playing telephone.

Appointments

An appointment is a scheduled service for one customer, one service, one or more pets, on a specific date and time. Statuses: Pending (awaiting approval) → ScheduledCompletedCancelled.

Auto-approval policy (Settings → Bookings):

  • None — you approve every booking manually.
  • Existing customers only — returning customers are auto-confirmed; new customers wait for review.
  • All — fully self-serve.

Recurring appointments

For weekly / biweekly / monthly regulars, create a recurring series. The plugin generates individual appointments that can be edited or cancelled one at a time without breaking the parent schedule. Use with a Stripe Subscription (below) for completely hands-off billing.

Payments

Payment methods

Four payment methods are supported, and each one can be independently enabled and re-ordered on the booking form / invoice page:

MethodTypeHow it works
Credit / debit cardAutomated (Stripe)Stripe Checkout charges the card; the webhook auto-marks the invoice paid.
VenmoManualCustomer taps your Venmo username; pays via the Venmo app; admin marks invoice paid when funds arrive.
ZelleManualCustomer sees your Zelle contact (email / phone) + instructions; sends via their bank; admin confirms.
PayPalManualCustomer sees your PayPal username + instructions; sends via PayPal; admin confirms.

The order methods appear to the customer is controlled by Settings → Payments → Method order. Drag to reorder.

Stripe setup

  1. From your Stripe dashboard, grab the publishable and secret API keys. Paste them into Settings → Payments → Stripe. Toggle test / live as needed.
  2. Create a webhook endpoint pointing at https://yoursite.com/wp-json/dwb/v1/stripe-webhook.
  3. Select these events: checkout.session.completed, payment_intent.succeeded, payment_intent.payment_failed, charge.refunded, customer.subscription.*, invoice.paid, invoice.payment_failed.
  4. Copy the webhook signing secret into Settings.
If Stripe is disabled or unconfigured, the booking form and invoice page fall back to showing whichever manual methods you've enabled.

Venmo, Zelle & PayPal

For each manual method you enable, you'll configure:

  • Username / contact — the handle or email customers send payment to.
  • Instructions — free-form text shown alongside the username (e.g. "Include invoice number in the payment note.").

When a customer picks a manual method, the invoice status flips to Pending and you'll see the payment instructions the customer was shown. When the funds land, open the invoice and click Mark Paid — the transaction is logged and the customer receives a receipt email.

Venmo links use the ?txn=pay deep-link, so tapping the method on mobile opens the Venmo app pre-filled.

Invoices

Every paid appointment creates an invoice. From the Invoices list you can send a payment link by email (Stripe Checkout), mark manually-paid, void, or consolidate multiple unbilled appointments for a single customer into one invoice.

StatusMeaning
DraftNot yet sent to customer.
SentPayment link has been emailed.
PendingCustomer clicked a manual method; awaiting bank transfer / cash.
PaidSettled. Transaction row exists.
OverduePast due date, unpaid.
VoidCancelled invoice.

Subscriptions (recurring billing)

Attach a Stripe subscription to a recurring-appointment series to auto-bill your regulars. The plugin creates the Stripe price server-side and sends the customer a Checkout link to save their card and authorize ongoing billing.

When a subscription renews, Stripe fires invoice.paid; the plugin records the payment in the transactions ledger and keeps the subscription marked active.

Refunds

From any paid appointment or invoice, click Refund. You can refund the full amount or a partial amount; Stripe is called synchronously and the transaction status is updated to refunded or partially_refunded. The customer receives a refund email automatically.

Portal & integrations

The customer portal

Every customer with a linked WordPress user (role dwb_customer) can sign in and see:

  • Upcoming appointments, with pet names and service.
  • Past appointments and any outstanding invoices.
  • Invoice detail with line items and a pay-now button.
  • Editable profile (name, email, phone, address, house-access note).
  • Editable pet profiles (breed, age, weight, temperament, medical needs).
Customers cannot see any other customer's records — every portal call is ownership-checked server-side.

Google Calendar sync

One-way sync from Dog Walking Business → Google Calendar. OAuth connect from Integrations → Google Calendar, pick the calendar, and every appointment you create (or that customers book) appears on your Google Calendar with the pet name, service, address, and key code in the event description.

Email notifications

TriggerEmail sent to
New bookingAdmin (new-booking alert)
Booking approvedCustomer
Payment link sentCustomer
Payment receivedCustomer (receipt)
Appointment reminderCustomer (24h before)
Subscription renewedCustomer
Subscription payment failedAdmin + customer

Every template is editable and supports merge tags like {customer_name}, {pet_names}, {appointment_date}, {service_name}, {total_amount}, {payment_link}, {my_account_url}.

Roles & permissions

RoleCan do
AdministratorEverything — settings, integrations, all customers & appointments.
Shop Manager (Editor)All customer & appointment operations, no plugin settings.
dwb_customerRead/write their own profile, pets, appointments, invoices only.
Developer

Hooks

dwb_appointment_approved

Fires when an appointment moves from pending → scheduled.

dwb_payment_received

Fires after a successful Stripe payment. Params: $appointment_id, $amount.

dwb_subscription_canceled

Fires when a Stripe subscription is canceled.

dwb_subscription_payment_failed

Fires on invoice.payment_failed.

dwb_trust_forwarded_ip (filter)

Return true when your site sits behind a trusted reverse proxy that sets X-Forwarded-For. Default false.

REST endpoints

RoutePurpose
POST /dwb/v1/stripe-webhookStripe event receiver (signature-verified).

Most frontend mutations go through admin-ajax with rate limiting (contact form, returning-customer lookup) and nonce/capability checks on everything that touches a customer record.

Template overrides

Copy an email template into your theme to customize it without losing changes on plugin update:

your-theme/
└── dog-walking-biz/
    └── emails/
        ├── booking-confirmation.php
        ├── payment-link.php
        ├── payment-receipt.php
        └── appointment-reminder.php