How tickets are issued, synced and voided

Tickets are posts of type seatpass_ticket (not public, no archive). Issue. On woocommerce_payment_complete, or when an order moves to Processing or Completed, Seat Pass creates one ticket per…

Tickets are posts of type seatpass_ticket (not public, no archive).

Issue. On woocommerce_payment_complete, or when an order moves to Processing or Completed, Seat Pass creates one ticket per order that contains at least one ticket product. A 10-character code is generated from ABCDEFGHJKMNPQRSTUVWXYZ23456789 (no 0/O/1/I/L), a QR PNG is written to uploads/seat-pass/qr/, and the ticket stores a snapshot of the items, guest names, buyer email and seat total. Running the issue step twice on the same order is safe: the existing ticket is re-synced instead.

Sync. When an order is edited (quantities changed, items removed, partial refund), the ticket’s item snapshot and seat total are recalculated. If the seat total drops below the seats already checked in, the used count is capped.

Void. When an order becomes Cancelled, Refunded, Failed, Pending, On hold or is trashed, its tickets are voided with a reason. A voided ticket page shows “This ticket is no longer valid” and cannot be checked in. If the order is paid again (status back to Processing or Completed), the ticket is marked valid again.

Ticket meta (_seatpass_*): code, order_id, type, items, attendee, attendees, company, email, status (valid / void), void_reason, seats_total, seats_used, checkins (log), checked_in.