Topics

⌘K
  1. Home
  2. Docs
  3. Topics
  4. Plugin Overview
  5. FooEvents Seating
  6. Seating Selection and Checkout Workflow

Seating Selection and Checkout Workflow

This guide explains exactly how FooEvents Seating handles seat selection, checkout, and when seats are reserved or released. Use it to understand why seats show as unavailable, when they are blocked, and how order statuses affect availability.

Seating Selection Lifecycle #

At a high level, this is what happens when a seat is booked using FooEvents Seating:

  1. Customer selects seats on the product page.
  2. Selected seats are held in their cart/session while they go to checkout.
  3. At checkout, FooEvents validates the selection and checks to ensure the seats are still free.
  4. If validation passes, the order is created and those seats are immediately blocked.
  5. When the order reaches the ticket generation status (e.g. Completed), FooEvents uses the stored seat data to create tickets.
  6. Seats are released (or not) later based on your “Make seats available on order status” settings.

Important: Seat availability is enforced at checkout, not when tickets are generated. This means seats can be blocked without receiving payment and will only be made available again based on your release settings (e.g canceled or failed orders), or if you make the seats available again manually.

How Seat Selection Works #

1. Product Page – Seat Selection and Temporary Hold #

  • On the product page, the customer sees your seating chart.
  • They select one or more seats (or areas, depending on your chart).
  • Those choices are stored in their cart/session as part of the line item.
  • Seats will only be temporarily reserved like this for 10 minutes. If the customer does not complete the checkout process within 10 minutes of adding the seating ticket to their cart, the seat(s) will be made available again for other customers to choose. If the customer who originally selected that seat(s) still tries to complete the checkout process then they will see a message saying that their seats are not available anymore and they will be required to select different seats.

At this stage:

  • The seats are effectively “reserved” for this customer’s session only, but they are not yet globally blocked in the system. This is a temporary hold, but these seats will still show up as unavailable for all other customers until the hold is released.
  • In certain edge cases, another customer might still try to select the same seat, but this is resolved during checkout validation (see next step).

2. Cart Changes – Before the Order Is Placed #

Before an order is created (during the cart/checkout stage):

  • If the customer removes the event item from the cart,
  • Or reduces the quantity in the cart,

Then:

  • The previously selected seats for that item are released back to available, because no order was ever created to block them.

If they then add the product again, they must reselect seats.

3. Checkout Validation – Final Seat Availability Check #

When the customer submits the checkout form:

  • FooEvents Seating checks that:
    • All required seating fields are present (correct number of seats, valid selections, etc.).
    • The selected seats are still available and not already blocked by another order.

If a problem is found:

  • Checkout is blocked and an error message is shown.
  • The customer must go back and choose new seats.

If everything is valid:

  • Checkout proceeds and WooCommerce creates the order.

4. Order Creation – Seats Are Blocked #

As soon as the order is created and the checkout completes successfully:

  • The selected seats are immediately marked as unavailable for that event.
  • This happens even if the order is:
    • Pending payment
    • On hold (for example, EFT/bank transfer, PO, manual review)

FooEvents stores the seat data on the order, and those seats are now blocked for everyone else until they are released (see section 5 below)

This approach is what prevents normal double-booking of the same seat.

5. Ticket Generation – Using Stored Seat Data #

When the order reaches your configured “send tickets” status (usually Completed):

  • FooEvents uses the stored seat selections from the order.
  • Tickets are generated and include the exact seat details (section, row, seat, etc.).
  • Tickets are sent via email / PDF, depending on your FooEvents setup.

Important:

  • No second seat availability check happens at this stage.
  • The seats were already blocked at checkout, so ticket generation is just copying the stored data onto tickets.

6. Releasing Seats – “Make Seats Available on Order Status” #

Automatic seat release is controlled entirely by your “Make seats available on order status” setting. When an order changes to any status you selected in this setting (canceled or failed), the seats linked to that order are released and become available for other customers again.

We recommend using this option with caution. Releasing seats automatically will make them available again and allow your customers to book the seat.

It is also possible to release seats manually (see 6.4 below).

6.1 Refunds #

A refund by itself does not release seats.

  • Seats are only freed when the order moves to one of the statuses you configured under “Make seats available on order status”.
  • By default, that means Cancelled and Failed control when seats are released.

What this means in practice:

  • If you refund an order but leave it on a status that is not included in “Make seats available on order status”, the seats stay blocked.
  • If you want refunded orders to free up seats, you must manually release the seat or change the order’s status to Canceled after you process the refund in order to release the seat. This ensures seats are not accidentally released when refunding an order.

6.2 Deleting Tickets #

If you delete a ticket post entirely, FooEvents Seating also removes its seat from the unavailable list.

  • This effectively frees the seat, allowing it to be booked again.
  • Keep this in mind if you delete tickets manually; you’re not just removing the ticket record, you’re also releasing the associated seat back into availability.

6.3 Canceling Tickets #

Changing a ticket’s status to “Canceled” does not free the seat. After canceling a ticket, you will need to manually release the seat (see 5.4) or cancel the order to do so.

6.4 Manually Releasing Seats #

In the product’s seating tab you can manually free seats: open the seating chart on the product edit page, select the seats you want to release, and save. That clears those seats from the “unavailable” list so they become bookable again, regardless of the order status.

How It All Fits Together #

You can think of it as a simple chain:

  1. Product setup
    • Defines which seats exist and how they’re displayed.
    • Used to manage seating availability.
  2. Front-end selection
    • Customer picks seats on the product page.
    • Seats are held in their cart/session while they move to checkout.
  3. Checkout validation
    • Confirms required data and checks seats are still free.
    • If validation passes, the order is created and seats are blocked.
  4. Ticket generation
    • Uses the stored seat selections on the order.
    • Creates tickets with the correct seat information.
  5. Order status rules
    • Your “Make seats available on order status” setting determines if/when seats are released back to available.

Tips and Best Practices #

  • Delayed payments (EFT/PO/on-hold orders)
    • Remember: seats are blocked as soon as the order is created, even if it hasn’t been paid yet.
    • Set appropriate release statuses (e.g. Cancelled/Failed) to avoid seats being locked for unpaid orders indefinitely.
  • Keep release statuses configured
    • In most cases you should keep only Cancelled selected under “Make seats available on order status”. Many payment gateways allow Failed orders to be paid again by the customer, but not Cancelled orders. If you select Failed here then the seats will be made available when an order fails, but if the customer pays that order then the seats will stay available, potentially causing other customers to choose those seats as well. The Failed option is meant to be used in specific cases where orders can’t be paid again by customers.
  • Encourage customers to complete checkout
    • Seat holds in the cart are not permanent; real blocking only happens once the order is created.
    • If customers take too long and someone else successfully checks out with the same seat first, the late checkout will fail validation.
  • Test your configuration
    • On a staging or test site:
      • Place a test order and verify seats become unavailable.
      • Cancel or fail the order and confirm seats are released according to your settings.

Common Questions #

“What happens if someone abandons checkout?” #

If a customer abandons the cart or leaves checkout without placing the order:

  • No order is created.
  • Seats are not blocked.
  • Any temporary “hold” in that session effectively disappears after 10 minutes, and the seats remain available.

“Can a seat be booked twice?” #

Under normal use, no:

  • At checkout, FooEvents validates that the seats are still available.
  • The first successful order that passes validation blocks the seat.
  • Later attempts using that same seat will fail checkout and the customer will be told to choose different seats.

Double-booking can only occur if:

  • You change data directly in the database, or
  • You manually override something outside the normal flow.
  • If you set seats up to be made available again on “Cancelled” and/or “Failed” orders, and then let a customer pay the same order again that was previously set to this status.

“Do tickets re-validate seats?” #

No.

  • Seat validation is done once, at checkout, before the order is created.
  • Ticket generation simply reads the stored seat data from the order.
  • If the order exists and the seats were valid at that time, tickets are created accordingly.

That’s the full flow. If you still see unexpected behavior with seats blocking or releasing, check:

  • Your “Make seats available on order status” setting, and
  • The actual order statuses in WooCommerce for the affected orders.
Tags , , , , , ,