Docs Raffle for WooCommerce

Manual Ticket Sale

Manual Ticket Sale#

Record a face-to-face raffle sale paid in cash, by cheque, by bank transfer, or any other off-online method without forcing the customer through the regular checkout. A completed WooCommerce order is created behind the scenes, so the customer ends up with the same tickets, emails, and PDFs they would receive from an online sale.

Built for walk-in sales at clubs, event tables, door-to-door volunteers, and any scenario where the buyer hands over cash and you need to issue a ticket on the spot.

Enabling#

  1. Go to WooCommerce → Settings → Raffle → Pro Modules and enable Manual Ticket Sale.
  2. The form appears at WooCommerce → Raffle Tickets → Manual sale.

Only users with the manage_woocommerce capability can record manual sales.

Recording a sale#

Fill in the form:

FieldNotes
RafflePick from any published or private raffle product.
QuantityNumber of tickets to issue. Ticket numbers are auto-assigned by the raffle’s normal numbering scheme.
Customer nameRequired. Used as the billing name on the order.
Customer emailOptional but recommended — without it, the customer can’t receive their ticket email or PDF.
Customer phoneOptional. Stored on the order for records.
Payment methodCash, Cheque, Bank transfer, or Other. The list is filterable so you can add custom methods.
Reference / noteOptional. Cheque number, receipt number, or any internal reference. Saved to the order as a note.
Attribute to volunteerOptional. Visible when the Volunteer Sales module is on. Populates after you pick a raffle.
Send customer emailOn by default. Uncheck to skip the “Order complete” email — useful when you’ll hand over a printed receipt instead.

Click Create sale. The order is created and immediately marked as paid, which triggers the standard raffle ticket generation flow.

What happens behind the scenes#

  1. A WooCommerce order is created with status pending and tagged with created_via = rfwc_pro_manual_sale.
  2. The chosen raffle product is added as a line item with your quantity.
  3. If a volunteer was selected, the volunteer ID is pinned to the line item.
  4. Billing address fields (name, email, phone) are populated.
  5. The payment method and method title are set.
  6. payment_complete() runs. Raffle products are virtual, so the order transitions straight to completed.
  7. The free plugin’s ticket generator fires on woocommerce_order_status_completed and creates the tickets.
  8. Volunteer attribution runs (if applicable). PDF generation, email dispatch, and any other Pro modules listening to ticket generation run as normal.

The customer ends up with the same artifacts as an online buyer — same ticket records, same email content, same PDF.

Edit afterwards#

The created order shows up in WooCommerce → Orders like any other order. You can refund it, edit the customer details, or add additional notes. The order keeps a note explaining it came from a manual sale, so the audit trail is clear.

Compliance notes#

  • Manual sales count toward all the same totals as online sales: tickets sold, revenue, analytics, winners.
  • For raffles with a skill-testing question or a free entry route, the manual sale is treated as a paid entry (you collected payment in person).
  • For volunteer leaderboards, manual sales attributed to a volunteer count alongside online sales.

Settings#

There are no global settings for this module beyond the on/off toggle. Each sale uses the values you enter on the form.

Developer notes#

HookTypeUse
rfwc_pro_manual_sale_payment_methodsFilterAdd or remove payment methods on the form. Default array: cash, cheque, bank_transfer, other.

Example — adding a “Card terminal” option:

add_filter( 'rfwc_pro_manual_sale_payment_methods', function ( $methods ) {
    $methods['card_terminal'] = __( 'Card terminal', 'your-theme' );
    return $methods;
} );

The order is created using wc_create_order() and standard WooCommerce CRUD methods, so it’s fully HPOS-compatible.