1. Documentation /
  2. WooCommerce Pre-Orders

WooCommerce Pre-Orders

With WooCommerce Pre-Orders you can sell pre-orders for products and services in your WooCommerce store.

Pre-Orders can be charged upfront or when the pre-order is available by setting an optional date and time when the pre-order will be available.

Requirements

↑ Back to top
  • WooCommerce version 7.2 or higher
  • WordPress version 6.1 or higher
  • PHP version 7.2 or higher

Installation

↑ Back to top
  1. Download the extension from your WooCommerce dashboard.
  2. Go to Plugins > Add New > Upload and select the ZIP file you just downloaded.
  3. Click Install Now and then Activate.
  4. Click Configure and read the next section to learn how to set up the extension.

Setup and Configuration

↑ Back to top

General settings

↑ Back to top

Go to: WooCommerce > Settings > Pre-Orders.

  • Add to Cart Button Text – This controls the add to cart button text on single product pages for products that have pre-orders enabled.
    • e.g. “Pre-Order Now” rather than “Add to cart”
  • Place Order Button Text – This controls the place order button text on the checkout when an order contains a pre-orders.
    • e.g. Place Pre-Order Now rather than “Place Order”
  • Single Product Page Message – Add an optional message to the single product page below the price. Use this to announce when the pre-order will be available by using {availability_date} and {availability_time}. Limited HTML is allowed. Leave blank to disable. 
  • Shop Loop Product Message – Add an optional message to each pre-order enabled product on the shop loop page above the add to cart button. Use this to announce when the pre-order will be available by using {availability_date} and {availability_time}. Limited HTML is allowed. Leave blank to disable.
  • Availability Date Title Text – This controls the title of the availability date section on the cart/checkout page, on the “thank you”, view order, order email templates, and order details tables. Leave blank to disable display of the availability date in the cart.  
  • Charged Upon Release Order Total Format – This controls the order total format when the cart contains a pre-order charged upon release. Use this to indicate when the customer will be charged for their pre-order by using {availability_date} and {order_total}.
  • Charged Upfront Release Order Total Format – This controls the order total format when the cart contains a pre-order charged upfront. Use this to indicate how the customer is charged for their pre-order by using {availability_date} and {order_total}.
  • Disable automated pre order processing – This is used for when you’re on a staging/testing site and don’t want any pre orders to be processed automatically.

Product settings

↑ Back to top

Pre-orders can be enabled for either simple or variable product types by editing a product and using the new “Pre-Orders” tab which is added to the Product Data admin panel:

As shown in the above image, the following fields are available for configuration:

  • Enable Pre-Orders – This enables the product in question for pre-order
  • Availability Date/Time – Set an optional availability date/time for when the pre-order product is “available” for purchase as a regular product (only future dates/times are valid). If set, this availability date and time will be displayed in a number of places on the frontend, and once the date/time is reached the product will cease to be a “pre-order” product, and behave as a normal product.
  • Pre-order Fee – This allows you to charge an optional pre-order fee on top of the regular product price in whichever currency you set for your store.
  • When to charge – This determines when a pre-order product is charged for. The options include:
    • Upon Release – A pre-order product charged “upon release” is not charged until the product is made available for purchase, that is to say, stops being a pre-order product. This can happen either by the optional Availability Date/Time being met, or by a shop admin manually completing a pre-order. Supported gateways will automatically charge a saved credit card for pre-order customers, while any gateway can be supported by a “Pay Now” email being dispatched to the pre-order customer to collect payment.
    • Upfront – A pre-order product charged “upfront” is charged at checkout as would be a normal product.
Pre-Orders applies to the product-level, meaning all variations will be marked as pre-order items. This allows users to choose which variation they want to pre-order, but does not allow you to set individual variations as pre-order items. For that scenario, you can use the Backorders functionality built into WooCommerce core.

Updating product pre-order configuration

↑ Back to top

The Pre-Orders section can be edited and updated with different limitations.

If “When to Charge” is set to Upon Release then the Pre-Order tab becomes read-only:

As long as there are Active pre-orders for a product the fee and “when to charge” settings can not be changed, while the release date may be changed via the new WooCommerce > Pre-Orders > Actions tab, described later in this document.

Displaying pre-order countdown timer

↑ Back to top

Pre-order countdown timers may be added to the product page, or indeed any page using the new shortcode: [woocommerce_pre_order_countdown]. This shortcode supports a number of optional arguments, and in its simplest form will display the years, months, days, hours, minutes and seconds remaining until the Availability Date/Time, for the current page product. The following options may also be used to customize the timer to suit your needs:

  • product_id/product_sku – ID or SKU of Pre-Order product to countdown to. Defaults to current product, if any. This allows you to place the countdown timer for a particular product anywhere on your site that shortcodes are supported.
  • until – date/time to count down to, overrides product release date if set. Example values: “15 March 2015”, “+1 month”. More examples: http://php.net/manual/en/function.strtotime.php
  • layout – The countdown layout, defaults to y Years o Months d Days h Hours m Minutes s Seconds. See http://keith-wood.name/countdownRef.html#layout for all possible options
  • format – The format for the countdown display. Example: yodhms to display the year, month, day, and time. See http://keith-wood.name/countdownRef.html#format for all options
  • compact – If ‘true’ displays the date/time labels in compact form, ie ‘d’ rather than ‘days’. Defaults to ‘false’ (Reference: http://keith-wood.name/countdownRef.html#compact)
  • before – text to show before the countdown. Only available if ‘layout’ is not '' (an empty string)
  • after – text to show after the countdown. Only available if ‘layout’ is not '' (an empty string)

Once the Availability Date/Time is reached, the product page will refresh if open, and the product will be displayed as a normal product.

Product inventory

↑ Back to top

Product inventory is enabled/disabled and managed as for any normal product. This allows you to set stock, mark as “out of stock” and otherwise manage inventory for your pre-order product like normal. If stock management is enabled, the product inventory will be reduced with each pre-order placed, meaning you can easily and effectively limit the stock of items available for pre-order. If an item is out of stock and backorders are not allowed, then users will see the message “No longer available for pre-ordering”.

Pay Later payment gateway

↑ Back to top

The Pre-Orders plugin includes a “Pay Later” gateway which is used to provide support for any and all payment gateways pre-order products which are paid for “upon release.” The Pay Later gateway will only be displayed as an option during checkout if there is a pre-order in the cart and the pre-order amount is charged “upon release,” alongside any available supported gateways:

pre-orders-paylater

The Pay Later gateway can be configured by going to WooCommerce > Settings > Checkout > Pay Later where it can be enabled/disabled, and the displayed Title and Description can be customized.

WooCommerce Pay Later payment gateway settings
WooCommerce Pay Later payment gateway settings

Emails admin

↑ Back to top

The Pre-Orders plugin includes a number of Pre-Order specific emails (described below), which can be configured and customized like any of the WooCommerce core emails from the WooCommerce > Settings > Emails tab.

Managing pre-orders

↑ Back to top

Manage

↑ Back to top

A pre-order is managed very similarly to a standard order, with an additional “pre-ordered” stage in which the pre-order is active and can either be cancelled (order processing terminates) or completed (order processing continues as normal). The Pre-Orders plugin adds this new Order status named “pre-ordered”. An order with this status indicates that a pre-order has been placed for a product which is not yet available for fulfillment and a “Pre-Order” record is created and associated with the order (referred to as the “Parent Order”). A “Pre-Order” may have one of the following statuses, which are distinct from the regular Order status:

  • Active – A pre-order status of “active” indicates that a product has been pre-ordered and is not yet available for fulfillment. The parent Order should have a status of “pre-ordered”. The product may have been paid for already (for pre-orders that are configured to be paid “upfront”) or may require payment “upon release”.
  • Completed – A pre-order status of “completed” indicates that a product has been pre-ordered and is now available for fulfillment. The parent Order should have a status of “pending”, “processing”, “failed” or “completed”, depending on the pre-order configuration, payment status, and order handling process. The product may have been paid for already, or may still require payment. Once a pre-order status is set to “complete” the parent Order is no longer considered to be “pre-ordered” and should be managed as would any other order.
  • Cancelled – A pre-order status of “cancelled” indicates that a pre-order has been cancelled. When a pre-order is cancelled the parent Order status will transition to “cancelled” as well, and the order is no longer considered “pre-ordered” and should be managed as would any other order in terms of managing refund, etc.

Pre-orders and pre-order statuses may be viewed, managed and administered in WooCommerce > Pre-Orders:

The Manage screen allows you to:

  • Quickly view all your pre-orders at a glance
  • Segment your pre-orders by pre-order status (Active, Cancelled, Completed)
  • Filter pre-orders by customer, products or availability date
  • Perform a bulk action on one or more pre-orders. Each bulk action results in the dispatch of an email to the affected customers, alerting them to the change in pre-order status, and an optional message can be provided in the textarea shown in the image above. The available bulk actions include:
    • Cancel – Cancel one or more pre-orders (this will also cancel the parent order record). Note that for “upfront” payment pre-orders, any charges will not be automatically reversed and must be done so manually as with a normal WooCommerce refund.
    • Complete – Complete one or more pre-orders. This will have the effect of charging the customer for “upon release” pre-orders, whether automatically by a supported gateway, or by sending them a “Payment Required” email to complete the checkout process. Either way the parent order status will move to “pending”, “processing”, “failed” or “completed” depending on the configuration of the pre-order, and the payment status. Regardless, once a pre-order is “completed” order management is handled in the normal WooCommerce way.
    • Customer Message – This allows you to send an arbitrary message to all customers with selected pre-orders, without changing the pre-order status. This could be used to provide important updates to your customers regarding the status of their pre-order, or other news.

Pre-Order Actions

↑ Back to top

In addition managing/administering pre-orders individually/in bulk from the “Manage” tab, certain actions can be performed on pre-orders, based on the product, from the WooCommerce > Pre-Orders > Actions tab. These actions allow you to select a pre-order product and perform an action upon all pre-orders for a given product, optionally send an email notification to the affected customers, and supply an optional customer message. The following actions are supported:

Email

Allows you to send a custom email to a group of pre-order customers based on their product. This will not change the pre-order status.

Change Release Date

This action allows you to change the Availability Date/Time for a pre-order product, and updates and optionally notifies all affected customers. This will not change the pre-order status. If you change the date to a date in the past or “now,” it’s no longer a pre-order; it becomes a past/current order, no functionality is triggered, and orders do not complete.

Complete

Completes all active pre-orders for the given product, charging customers who used a supported gateway and optionally sending all affected customers a notification informing them their pre-order is available, or requires payment, depending on the pre-order configuration and order payment status. The parent order status will move to “pending”, “processing”, “failed” or “completed” depending on the configuration of the pre-order, and the payment status. Regardless, once a pre-order is “completed” order management is handled in the normal WooCommerce way.

Cancel

Cancels all active pre-orders, optionally sending an email notification along with a customized message. Note that for “upfront” payment pre-orders, any charges will not be automatically reversed and must be done so manually as with a normal WooCommerce refund. This action will set the parent order status to “cancelled” as well.

Order management

↑ Back to top

Once a pre-order is cancelled or completed the parent Order status changes from “pre-ordered” to one of “pending,” “processing,” “failed,” “cancelled” or “completed” depending on the action, pre-order configuration and order payment status. Once the pre-order status is no longer “active” and the order status is no longer “pre-ordered,” the parent Order can be managed as would be any normal order, in terms of completing payment, issuing refunds, etc.

Putting an order with an “active” pre-order into the trash will cause the pre-order status to change to “cancelled.” The associated customer will not be emailed in this case.

Customer experience

↑ Back to top

To provide the best and most satisfactory customer experience, pre-order products are modified in the shop/category catalog pages, product page, cart and checkout pages, and order detail tables on the “thank you,” view order and email notifications, to show text indicating that the product is available for “pre-order” and what its release date/time is, if configured.

Add to cart

↑ Back to top

Due to the complexity of the pre-order checkout process, an order may contain only a single pre-order product, and no other products, pre-order or otherwise. If a customer adds a pre-order product to a non-empty cart, the cart will be automatically emptied and the pre-order product added:

pre-orders-notices

Checkout

↑ Back to top

During checkout there are two main “modes” of collecting payment: “upfront” and “upon release.”

  • Pre-order products that are configured to require payment “upfront” can be purchased with any gateway in the normal manner as payment is collected at the time of checkout as with a normal product.
  • Pre-order products that are configured to be collect payment “upon release” are handled differently as payment is not authorized/settled during the checkout process, but rather later when a pre-order is completed.

Pre-orders that are paid for “upon release” can be paid for “automatically” when the pre-order is completed by a supported gateway that collects and saves (in a PCI-compliant manner) payment details during checkout, or “manually” with any gateway by the sending of a “Payment Required” email to the customer to collect payment details when a pre-order is completed.

Of course a “manual” payment requires extra actions/steps by the customer for the transaction to be finalized, so using a supported gateway is preferable whenever possible as it should increase customer satisfaction and reduce the rate of customers failing to complete their pre-order transaction. Manual payment is made possible by the special Pay Later Payment Gateway added by this plugin.

Customer account

↑ Back to top

Customers can view past and current pre-orders by visiting the Pre-Orders tab on your My Account page:

Completed, active, and canceled pre-orders are displayed, and customers have the ability to cancel active pre-orders.

Pre-order emails

↑ Back to top

The Pre-Orders plugin adds a number of pre-order emails to allow for notifications for the new pre-order and order statuses. The new emails are summarized below:

NameTypeDescription
New Pre-OrderAdminDispatched to the shop admin when a pre-order is placed, this is the equivalent of the standard “New Order” email and notifies the admin that a new pre-order has been received by the shop.
Pre-OrderedCustomerDispatched to the customer when a pre-order is placed, this is the equivalent of the standard “Processing Order” email and notifies the customer that their pre-order has been successfully received.
Pre-Order Release Date ChangedCustomerOptionally dispatched to the customer when a pre-order release date change occurs and notifies the customer of the change in availability date. An optional message may be provided by the shop admin.
Pre-Order CancelledCustomerOptionally dispatched to the customer when a pre-order is cancelled and notifies the customer of the cancellation event. An optional message may be provided by the shop admin.
Pre-Order AvailableCustomerOptionally dispatched to the customer when a pre-order is completed and notifies the customer of the availability of their pre-order product. In the case of a payment “upon release” product with a non-supported gateway (Pay Later gateway) or with a supported gateway that encounters a payment processing error (for instance expiration of the previously provided credit card), a “payment required” message and link is included to return the customer to a pay page on your shop to remit payment for their pre-order product. An optional message may be provided by the shop admin.

All of the above emails may be customized and configured in the WooCommerce Email settings: WooCommerce > Settings > Emails

Order completion

↑ Back to top

Once the pre-order has been completed the order is no longer considered to be “pre-ordered” and order processing behaves as with a normal product. The customer will receive any and all emails and notifications they would with the purchase of any other product from your shop.

Supported gateways for automatic payments

↑ Back to top

There are several payment gateways that support automatic payments for pre-orders. This means that a customer can provide credit card information upfront during checkout, and their card will be automatically charged when the pre-order is available.

Want to add Pre-Orders support to your payment gateway? Read the Pre-Orders Payment Gateway Integration Guide to learn how.

Frequently Asked Questions

↑ Back to top

Does the plugin support digital/downloadable products?

↑ Back to top

Yes. Upon order completion action, an email containing the download link(s) is sent to the customer.

Do Pre-Orders work with Subscriptions?

↑ Back to top

Not at this time.

Can products with pre-order enabled be purchased with other products?

↑ Back to top

Any product with pre-order enabled has to be purchased on its own. This is true whether the other products are pre-order products or not. If there are other products already in the Cart, they will be removed when the pre-order product is added to the Cart. The extension functions this way to prevent conflicts with payments.

Can I automatically charge my Pre-order when the associated order is Completed?

↑ Back to top

By default, the WooCommerce Pre-orders extension will not charge a Pre-order when the associated order is marked as Completed. However, this behavior can be changed with a snippet.

Customizations are not covered under our support policy, so this isn’t something we can help implement or troubleshoot on your site.

<?php // only copy this line if needed
/**
* Charge a WooCommerce pre-order when the associated order is set to Completed status
*
* @param int $order_id
* @param \WC_Order $order
*/
function sv_wc_charge_order_on_order_complete( $order_id, $order ) {
if ( ! class_exists( 'WC_Pre_Orders_Order' ) ) {
return;
}
if ( WC_Pre_Orders_Order::order_contains_pre_order( $order ) && WC_Pre_Orders_Manager::can_pre_order_be_changed_to( 'completed', $order ) ) {
WC_Pre_Orders_Manager::complete_pre_order( $order, $message );
}
}
add_action( 'woocommerce_order_status_completed', 'sv_wc_charge_order_on_order_complete', 10, 2 );

Questions and Support

↑ Back to top

Something missing from this documentation? Do you still have questions and need assistance?

  • Have a question before you buy this extension? Please fill out this pre-sales form – please include the name of this extension in your query.
  • Already purchased and need some assistance? Get in touch with a Happiness Engineer via the WooCommerce.com Support page and choose this extension name from the “I need help with” dropdown