WooCommerce guide
How to Change the Add to Cart Button to Pre-Order in WooCommerce
Published · By the PreOrder Pilot team at PLANO
If you sell a product before it arrives, the button is the first place a customer should see it. A button that still says Add to cart suggests the item ships tomorrow, and that is where “where is my order?” emails come from. WooCommerce has no setting for this, but you can change the text with a short code snippet or with a pre-order plugin. This guide shows both, explains which WooCommerce buttons each method changes, and covers the parts that a new button label alone doesn't fix.
The short answer
- With code: filter
woocommerce_product_single_add_to_cart_text(product page) andwoocommerce_product_add_to_cart_text(shop and category pages), and return “Pre-order” only for the products you choose. - With a plugin: a pre-order plugin changes the button for products you enable and also carries the pre-order information into the cart, checkout, order and emails.
Method 1: Change the button text with a code snippet
WooCommerce gets the button text from two filters, one for the single product page and one for product lists such as the shop, category pages and related products. Both receive the product, so you can decide product by product.
The snippet below switches the text to “Pre-order now” for products whose stock status is On backorder, which is how many stores mark items they are taking orders for before stock arrives. Add it to a child theme's functions.php or with a code snippets plugin, never to the parent theme, where an update would remove it.
add_filter( 'woocommerce_product_single_add_to_cart_text', 'myshop_preorder_button_text', 10, 2 );
add_filter( 'woocommerce_product_add_to_cart_text', 'myshop_preorder_button_text', 10, 2 );
function myshop_preorder_button_text( $text, $product ) {
if ( $product instanceof WC_Product && 'onbackorder' === $product->get_stock_status() ) {
return __( 'Pre-order now', 'myshop' );
}
return $text;
}
You can use another condition instead, for example a product tag such as pre-order with has_term( 'pre-order', 'product_tag', $product->get_id() ). Avoid a condition that matches every out-of-stock product, unless you really accept orders for all of them: without backorders allowed, the product can't be bought, whatever the button says.
Where the snippet works, and where it doesn't
| Place | Does the snippet change it? |
|---|---|
| Single product page, simple product | Yes |
| Shop and category pages, simple product | Yes |
| Block themes (Product Button and Add to Cart with Options blocks) | Yes, in current WooCommerce versions, because the blocks ask the product for its button text. Check your own theme. |
| Variable product, one variation on pre-order | No. The page has one button for all variations, and the filter receives the parent product. Changing it per variation needs JavaScript or a plugin. |
| Cart, checkout, order and emails | No. The button text doesn't follow the item. |
If the new text doesn't appear, clear your page cache and any caching plugin first. Some themes and page builders also print their own button and ignore WooCommerce's filters; in that case, check the theme's settings for a button label option.
What changing the button doesn't do
A new label is a good start, but it only changes one line of text. Everything after the click still looks like a normal order:
- No date. Customers don't see when the item is expected unless you add it to the product description by hand.
- No reminder in the cart or emails. The cart, checkout and order confirmation show the product like any in-stock item.
- Orders get mixed in. Paid pre-orders land in Processing next to orders you can ship today, so it is easy to pack one by mistake.
- Backorder wording. WooCommerce's own notice for backorders says “Available on backorder”, which is not the same promise as a pre-order. Check your product pages and emails for it.
If you only take one or two pre-orders a year, the snippet plus a clear sentence in the product description may be enough. For launches and regular restocks, the gaps above are why most stores use a plugin. Our guide to WooCommerce backorders vs pre-orders explains the difference in more detail.
Method 2: Use a pre-order plugin
A pre-order plugin changes the button for the products you enable and handles what comes after it. Whatever plugin you choose, check that it lets you write your own button label, that the pre-order information reaches the cart, checkout and emails, and how it separates pre-orders from orders you can ship now.
Our free plugin, PreOrder Pilot for WooCommerce, does this for simple products:
- Install PreOrder Pilot from WordPress.org and activate it next to WooCommerce.
- Open a simple product and turn on pre-orders for it.
- Type your own button text, such as “Reserve yours”, or leave it empty to use the default “Pre-order now”. Add an optional availability date.
- Save and look at the product page, then add it to the cart and check the cart and checkout.
The label and availability message appear on the product page, in the cart, at checkout, in the order and in emails. Paid pre-orders get a separate Pre-ordered status, and marking the product released moves its orders to Processing. It works with classic and block checkout, and the free version needs no account or license key and has no product limit.
The free version supports simple products with full payment at checkout. Pre-orders on variable products, deposits, pay-later and turning pre-orders on automatically when stock runs out need the separate paid Growth add-on.
Choosing the wording
Short and specific works best. A few options and when they fit:
- Pre-order now works for most products.
- Reserve yours fits limited launches and small batches.
- Pre-order – ships in March works when the date is firm. Keep it short enough for mobile buttons, and update it if the date moves.
If your store runs in more than one language, wrap the text in a translation function, as in the snippet above, or use a plugin whose labels can be translated, so the button doesn't stay in English on your other languages.
Get PreOrder Pilot free on WordPress.org ↗
Questions
Pre-order button: FAQ
How do I change the Add to Cart text in WooCommerce without a plugin?
Use the woocommerce_product_single_add_to_cart_text filter for the product page and woocommerce_product_add_to_cart_text for shop and category pages. Add the snippet to a child theme or a code snippets plugin, and return your new text only for the products you choose.
Why didn't my button text change?
Clear your page cache first. If it still shows Add to cart, your theme or page builder may print its own button; check its settings for a label option. For variable products, the filter changes one button for all variations.
Can I show Pre-order on only one variation?
Not with the simple filter, because the product page has one button and the filter receives the parent product. You need JavaScript or a plugin that supports pre-orders on variations.
Does changing the button make the order a pre-order?
No. The cart, checkout, order status and emails still treat it as a normal order. Add the expected date and keep pre-orders apart from orders you can ship, or use a pre-order plugin.
Is there a free plugin for a pre-order button?
Yes. PreOrder Pilot for WooCommerce is free on WordPress.org for simple products. It sets your own button label, an optional availability date, a Pre-ordered order status and messages in the cart, checkout and emails.