Resources · Feature guides

Setting up WooCommerce ticketing for Site Calendar Pro

Sell event tickets through WooCommerce so every order flows through your existing cart, checkout, tax rules and reporting. Covers gateway choice, configuration, a real test purchase, and a refund.

Why use WooCommerce?

If you already run an online shop with WooCommerce, you can sell event tickets through the same cart and checkout your customers already know. Every ticket sold creates a real WooCommerce order — with stock control, tax handling, coupons, multiple payment methods, and reporting all flowing through the system you already have.

If events are the only thing you sell, Stripe direct is lighter to set up. WooCommerce makes sense when you're already invested in its ecosystem — for instance, you sell physical goods or memberships and want tickets to live alongside them.

Important — pick one gateway up front. Site Calendar Pro lets you choose Stripe (direct), WooCommerce, or Both (per-event override). Switching the global gateway later doesn't break existing events, but if you've already sold tickets through one gateway, those orders stay where they are. Decide once before you start selling.

Before you start

You should have ready:

  • woocommerce installed and activated, version 8.0 or later
  • At least one WooCommerce payment method enabled and tested (Stripe, PayPal, GoCardless, Cash on Delivery — any gateway that lets you complete a real checkout)
  • WooCommerce currency and tax settings already configured under WooCommerce → Settings
  • Site Calendar Pro 1.1.1.1 or later installed and activated (see Installing Site Calendar Lite and Pro and Activating your Pro licence)

Site Calendar Pro doesn't override WooCommerce's payment, tax or email systems — it sits on top and feeds tickets into the existing flow.


Step 1 — Choose WooCommerce as the payment gateway

In WordPress admin, go to Site Calendar → Settings → Tickets. At the top of the tab you'll see a Payment gateway selector. The options shown depend on what's installed:

  • Stripe — always available
  • WooCommerce — appears when WooCommerce 8.0+ is active
  • Both — lets you pick the gateway per-event in the event editor (advanced)

Select WooCommerce.

Picking WooCommerce routes ticket purchases through the WooCommerce cart and checkout instead of Stripe Checkout.

While you're on this tab, confirm the other settings:

  • Currency — should match what your WooCommerce shop already charges in. Site Calendar Pro auto-detects this from your WordPress locale (GBP for en_GB, USD for en_US, etc.).
  • VAT rate and Tax inclusive — UK sites default to 20% inclusive. Adjust if you're outside the UK or don't charge VAT on tickets.

Click Save Settings at the bottom of the page.


Step 2 — Add a paid ticket to an event

Go to Site Calendar → Events and either edit an existing event or click Add New. Scroll to the Tickets meta box and click Add ticket.

For a test, fill in:

  • Label: Standard entry
  • Price: 1.00 (keeps the test cost under £1 / $1 / €1)
  • Capacity: 5
  • Max per order: 2

Click Update on the event.

Add a ticket with name, price and capacity. The WooCommerce product is created later, on first purchase — not when you save the ticket.
How the WooCommerce integration works. Site Calendar Pro doesn't create a WooCommerce product when you save a ticket. Instead, products are created lazily on first purchase: the first time a customer clicks Buy tickets, Pro creates a hidden, virtual WooCommerce product for that ticket type behind the scenes and links it back to the ticket. Subsequent purchases reuse the same product, kept in sync with the ticket's price and title. This keeps your Products list clean — only ticket types that have actually been sold create products.

Step 3 — Do a real test purchase

Open the event's public page in an incognito browser. The Register form on the event page will show your ticket with a quantity selector and a Buy tickets button. Click it.

What happens next:

  1. Site Calendar Pro creates a hidden, virtual WooCommerce product for the ticket type behind the scenes
  2. The product is added to the WooCommerce cart
  3. You're redirected to the standard WooCommerce checkout page

Complete the checkout with a real card (or your gateway's test card if it supports one). After payment, you should land on the WooCommerce thank-you page.

The customer goes through WooCommerce's standard checkout — the same flow they'd see buying any other product on your shop.

Then verify all five of the following happened:

  1. The WooCommerce order appears in WooCommerce → Orders with status "Processing" or "Completed"
  2. The order has order meta linking it back to the event (look for _pcal_event_id and an order number formatted PCAL-NNNNNN like PCAL-000142)
  3. The customer receives the standard WooCommerce order confirmation email
  4. The customer also receives the Site Calendar branded ticket email with QR-coded PDF attached
  5. An attendee record appears in Site Calendar → Attendees linked to the event by order number
If all five checks pass, you're done. Tickets are now flowing through WooCommerce. Every coupon, tax rule, payment method, and report in your shop now applies to event tickets automatically.

Step 4 — Verify the linked WooCommerce product was created

Open Products → All Products in WordPress admin. The hidden product Site Calendar Pro created for your test ticket should now exist.

You may need to adjust the visibility filter — by default WooCommerce may hide catalog-hidden items from the products list. Look for a "Visibility" filter dropdown above the table and include "Hidden" if needed.

Click the new product to inspect it:

  • Product name matches the ticket label
  • Regular price matches the ticket price
  • Virtual is ticked (no shipping prompt at checkout)
  • Catalog visibility is set to Hidden (won't appear on shop pages or search)
  • A custom field _pcal_ticket_id links the product back to the source ticket
The auto-created product is hidden, virtual, and linked back to the source ticket via the _pcal_ticket_id custom field.
The product is a mirror, not a master. Don't edit the WooCommerce product directly to change price, name, or description — your edits will be overwritten the next time someone tries to buy this ticket. Always edit the ticket from the event editor; the product re-syncs automatically on the next purchase.

Step 5 — Refund the test purchase

To clean up after the test:

  1. Open the order in WooCommerce → Orders
  2. Click Refund
  3. Refund the full amount

Site Calendar Pro listens for the WooCommerce refund event and:

  • Marks the matching attendee record as refunded
  • Restores capacity to the event automatically
  • Records refund metadata against the attendee post (refund ID, refunded_at, refunded_by)

The hidden WooCommerce product stays in place — it's reusable for future purchases of the same ticket type. There's no need to delete it manually. If you trash the event, the product remains as an orphan; clean it up by filtering products by Hidden visibility and deleting any whose linked ticket post has been deleted.


What WooCommerce unlocks

Once tickets flow through WooCommerce, every shop feature you already have applies to events too:

  • Coupons — create discount codes (early bird, member rate, comp) under Marketing → Coupons
  • Tax rules — apply VAT, GST or sales tax using WooCommerce's standard tax tables
  • Multiple payment methods — Stripe, PayPal, Apple Pay, Klarna and bank transfer all in one flow
  • Reports — ticket revenue shows up in WooCommerce → Reports alongside merchandise
  • Refund automation — partial refunds, refund-on-cancellation rules and accounting exports work as standard
  • Subscription tickets — pair with WooCommerce Subscriptions to sell season passes or recurring memberships that include event access

Per-event gateway override (advanced)

If you set the global gateway to Both in Step 1, the event editor gains a per-event Payment gateway field. Use this when you want most events to use one gateway but a specific event to use the other — for example, all club fixtures use WooCommerce (where the rest of your shop lives), but a one-off charity gala uses Stripe direct because it needs to deposit into a separate bank account.

If left empty, the event falls back to the site-wide global setting.


Troubleshooting

"Buy tickets button is missing on event pages"

Two possible causes. (1) The WooCommerce gateway isn't active — check Site Calendar → Settings → Tickets and confirm "WooCommerce" is the selected gateway. (2) The ticket has no price, or capacity is set to zero — the button only appears when a sellable ticket exists.

"WooCommerce option isn't shown in the gateway selector"

WooCommerce isn't active. Go to Plugins, confirm WooCommerce is installed and activated, and that it's version 8.0 or later. The gateway selector only lists WooCommerce when class_exists('WooCommerce') is true.

"Order placed but no Site Calendar attendee record created"

Open WooCommerce → Status → Logs and look for entries from pcal-woo or related. The most common cause is a stalled WooCommerce action scheduler — go to WooCommerce → Status → Scheduled Actions and check the queue isn't backed up. Resume it if needed.

"Customer receives WooCommerce email but not the Site Calendar ticket email"

Usually an SMTP rate-limit when two emails fire simultaneously. Check WP Mail SMTP → Email Log for the Site Calendar ticket email. If logged as Sent but not received, check the customer's spam folder. If logged as Failed, the error message identifies the cause — typically missing sender-domain authentication (SPF/DKIM).

"No WooCommerce product appeared after I saved the ticket"

Expected. Products are created lazily on first purchase, not at ticket save time. To see the product appear, complete a test purchase first (Step 3 above), then revisit Products → All Products.

"Refunded order didn't release event capacity"

Confirm the refund was processed via WooCommerce's own Refund button (which fires the woocommerce_order_refunded hook), not by manually editing the order status to "Refunded." Site Calendar Pro listens for the refund event hook, not the status change.

"I edited the WooCommerce product price and it reset back"

This is expected. The product is a mirror of the ticket — Pro re-syncs the price, name, and description from the ticket on every purchase. Edit the ticket in the event editor; the product follows.


What's next

Stuck? Email support@getsitecalendar.com and we'll help directly. Pro licence holders get priority response.