DOCUMENTATION · VERSION 2.0.0

NextXen Pre-Order Manager documentation

WooCommerce pre-order plugin documentation for NextXen Pre-Order Manager including installation, settings, release dates, hooks, and troubleshooting.

This manual covers version 2.0.0. Settings and edition availability may differ in other releases.

1. Requirements

RequirementMinimumTested Up To
WordPress6.06.9
WooCommerce7.010.6
PHP7.48.4
⚠

WooCommerce must be installed and active before activating this plugin. If WooCommerce is missing, the plugin will display an admin notice and will not load.

2. Installation

2.1 Upload via WordPress Admin (Recommended)

  1. Log in to your WordPress admin panel.
  2. Go to Plugins → Add New Plugin.
  3. Click Upload Plugin at the top of the page.
  4. Click Choose File, select the nextxen-pre-order-manager.zip file, then click Install Now.
  5. After installation completes, click Activate Plugin.

2.2 Upload via FTP

  1. Unzip the downloaded nextxen-pre-order-manager.zip file.
  2. Connect to your server with an FTP client (e.g., FileZilla).
  3. Upload the nextxen-pre-order-manager folder to /wp-content/plugins/.
  4. In WordPress admin, go to Plugins → Installed Plugins and click Activate.

2.3 Verify Installation

After activation confirm the plugin is running by checking:

  • WooCommerce → Pre-Orders appears in the left admin menu.
  • WooCommerce → Settings → Pre-Orders tab is visible.
  • (Premium) The WordPress admin dashboard shows a Pre-Order Manager widget.

3. Global Settings

Navigate to WooCommerce → Settings → Pre-Orders to configure store-wide defaults.

3.1 Button Text Customization

SettingDefaultDescription
"Add to cart" button textPre-order nowText on the product page button when pre-orders are active
"Place order" button textPlace pre-order nowText on the checkout button when the cart contains a pre-order
💡

Keep labels action-oriented. Examples: "Reserve yours", "Claim your copy", "Pre-order today".

3.2 Message Customization

Messages appear on product pages and in product listings to inform customers about the release date.

Available Placeholders

PlaceholderOutput Example
{availability_date}January 15, 2026
{availability_time}09:00 AM
SettingDefaultWhere It Appears
Product page messageThis item will be released {availability_date}.Below the price on single-product pages
Product list messageAvailable {availability_date}.Under the product in shop/category pages

Both fields accept basic HTML (<strong>, <a>, <em>). Leave either field empty to hide it entirely.

Example custom message:

Launching <strong>{availability_date}</strong> — secure yours before we sell out!

3.3 Cart & Checkout Text

Available Placeholders

PlaceholderOutput Example
{order_total}$49.00
{availability_date}January 15, 2026
SettingDefaultPurpose
Release date labelAvailableLabel shown next to the release date in the cart line item
Charged upon release text{order_total} charged {availability_date}Shown when payment timing is "upon release"
Charged upfront text{order_total} charged upfrontShown when payment timing is "upfront"

3.4 Out-of-Stock Products

Setting: Enable pre-orders for out-of-stock products

When enabled, the plugin automatically enables pre-orders on compatible products (simple, variable, composite, bundle, booking, mix-and-match, subscription) when they go out of stock. The product is marked as "in stock" with stock management disabled, allowing customers to place pre-orders while inventory is unavailable.

ℹ

For variable products, all variations must be out of stock before this triggers. This setting does not override explicit per-product pre-order configuration.

3.5 Test Site Settings

Setting: Disable automatic pre-order processing

Check this box on staging or development sites to prevent WP-Cron from automatically charging customers or completing orders when a release date passes. This lets you test the full pre-order flow without affecting real payments.

🚫

Always leave this unchecked on your live production store.

4. Setting Up a Pre-Order Product

Pre-order settings are configured per product. Each product can have completely independent pre-order behavior.

4.1 Enable Pre-Orders

  1. Go to Products → All Products and open the product you want to configure.
  2. Scroll down to the Product data panel.
  3. Click the Pre-Orders tab (alongside General, Inventory, Shipping, etc.).
  4. Check the Enable pre-orders checkbox.

Supported Product Types

  • Simple
  • Variable
  • Composite (requires WooCommerce Composite Products)
  • Bundle (requires WooCommerce Product Bundles)
  • Booking (requires WooCommerce Bookings)
  • Mix and Match (requires WooCommerce Mix and Match)
  • Subscription / Variable Subscription (requires WooCommerce Subscriptions 6.2.0+)
⚠

If a product already has active pre-orders, the Pre-Orders tab will show a warning and lock the settings. You must complete or cancel all active pre-orders before changing the configuration.

4.2 Release Date

Field: Release date (optional)  |  Format: YYYY-MM-DD HH:MM

Enter the date and time when the product will become available. A date-time picker is provided for convenience.

  • Dates are stored and evaluated in your store's timezone (WordPress → Settings → General → Timezone).
  • If left blank, the product stays in pre-order status until you manually complete or cancel.
  • Customers will see this date in availability messages, the cart, and order confirmations.
💡

At release time, WP-Cron automatically completes all pre-orders for the product. See Section 10 for cron setup details.

4.3 Pre-Order Fee

Field: Pre-order fee (optional)

Enter a monetary amount to charge in addition to the product price as a reservation surcharge. Leave blank or set to 0 for no additional fee. This fee appears as a separate cart line item, clearly labeled.

4.4 Payment Timing

Choose when customers are charged:

OptionBehavior
Upfront (pay now) Full payment is collected at checkout. Order status is "Pre-ordered" until release, then transitions to "Processing" (physical) or "Completed" (virtual/downloadable).
Upon release (pay later) No payment at checkout. Order stays "Pre-ordered" until release. On release, if a saved payment method exists it is charged automatically; otherwise the customer is emailed a payment link.
ℹ

"Upon release" requires a payment gateway that supports tokenized/saved payment methods (e.g., Stripe, PayPal). For gateways that don't support this, a "Pay Later" placeholder gateway is used and the customer receives a payment link email on release.

4.5 Deposit (Partial Payment)

Collect a partial payment now and charge the remaining balance automatically when the product releases.

Step 1 — Configure the deposit on the product

FieldOptionsDescription
Deposit typeNone / Fixed amount / PercentageHow the deposit amount is calculated
Deposit valueAny positive numberThe fixed dollar amount (e.g. 20) or percentage (e.g. 25)

Examples

  • Fixed — $50: Customer pays $50 at checkout; remaining balance collected on release.
  • Percentage — 30%: Customer pays 30% of the product price now; remaining 70% collected on release.

What happens on release

  • A new WooCommerce order is automatically created for the remaining balance.
  • The customer receives an email with the balance order details and a payment link.
  • The original order is updated with a note linking to the balance order.

Where to see deposit data

  • Order detail page (admin): A "Deposit Information" section shows deposit paid, remaining balance, and a link to the balance order.
  • CSV export: "Deposit Paid" and "Remaining Balance" columns are included.
  • Dashboard widget: Active revenue includes deposit amounts.

4.6 Quantity Limit

Field: Max pre-orders (optional) — Enter a whole number. Leave blank or enter 0 for unlimited.

What It DoesDetail
Cart validationWhen the cap is reached, adding the product to the cart is blocked with a clear error notice.
Low-stock noticeWhen fewer than 10 slots remain, a notice appears on the product page: "Only X pre-order slots remaining — order soon!"
Sold-out noticeWhen 0 slots remain: "Pre-orders are now closed for this product."
Concurrent safetyEnforced server-side — concurrent orders cannot exceed the limit.
ℹ

The count includes only orders with an active pre-order status. Completed and cancelled orders do not count toward the limit.

5. Managing Pre-Orders (Admin)

Navigate to WooCommerce → Pre-Orders to access the pre-order management screen. It has two tabs: Manage and Actions.

5.1 The Pre-Orders List (Manage Tab)

ColumnDescription
OrderOrder number and customer name (links to the full WooCommerce order)
Pre-Order StatusActive, Completed, or Cancelled
ProductPre-ordered product (links to product edit page)
Release DateScheduled release date
When ChargedUpfront or Upon Release
Order TotalTotal value of the order
DateOrder creation date

5.2 Bulk Actions

Select one or more pre-orders using the checkboxes, then use the Bulk Actions dropdown to Complete or Cancel them in batch.

5.3 Filtering & Searching

  • By product — Filter to show only pre-orders for a specific product.
  • By status — Show Active, Completed, or Cancelled pre-orders.
  • Search — Search by order number or customer name/email.

5.4 Completing Pre-Orders

You can complete pre-orders in three ways:

  • Individually: Open the WooCommerce order, use the Order Actions box.
  • Bulk: Select orders in the Manage tab → Bulk Actions → Complete.
  • By product (Actions tab): Select the product, then click Complete Pre-Orders.

When completed: order status changes to Processing/Completed, "upon release" orders are charged or sent a payment link, deposit balance orders are created, and the customer receives a Pre-Order Available email.

5.5 Cancelling Pre-Orders

Via the Actions tab, select the product and click Cancel Pre-Orders. When cancelled: order status changes to Cancelled, the customer receives a Pre-Order Cancelled email, and the admin receives an Admin Pre-Order Cancelled email. Refunds for upfront payments must be processed manually.

6. CSV Export

Export all pre-order data to a spreadsheet with one click.

  1. Go to WooCommerce → Pre-Orders.
  2. Click the Export CSV button in the page header.
  3. Your browser downloads a file named pre-orders-YYYY-MM-DD-HHmmss.csv.

CSV Columns

ColumnDescription
Order IDWooCommerce order number
Pre-Order StatusActive, Completed, or Cancelled
Order StatusWooCommerce order status (e.g., Processing)
Customer NameBilling first name + last name
Customer EmailBilling email address
ProductPre-ordered product name
Release DateProduct availability date
When Charged"Upon release" or "Upfront"
Deposit PaidDeposit amount paid (blank if no deposit)
Remaining BalanceBalance due on release (blank if no deposit)
Order TotalFull order total
Date CreatedOrder creation date and time
💡

The file is UTF-8 encoded with a BOM, ensuring correct character display when opened in Microsoft Excel. Export requires the manage_woocommerce capability (Shop Manager or Administrator role).

7. Dashboard Widget

The Pre-Order Manager widget appears on your WordPress admin dashboard (Dashboard → Home).

SectionWhat It Shows
Active Pre-OrdersTotal active order count + active revenue (deposits + upfront payments)
This MonthNew, completed, and cancelled pre-orders for the current calendar month
Upcoming ReleasesUp to 5 products releasing within 30 days, sorted by release date, each linking to the product edit page
Quick ActionsManage Pre-Orders · Settings · Export CSV
ℹ

Stats are cached for 5 minutes using a WordPress transient. The cache clears automatically whenever a pre-order status changes, so numbers are always fresh after any activity.

8. Email Notifications

Configure all emails at WooCommerce → Settings → Emails.

EmailRecipientTrigger
New Pre-OrderAdminA customer places a new pre-order
Pre-Ordered ConfirmationCustomerA pre-order is successfully placed
Pre-Order AvailableCustomerA pre-order is completed/released
Pre-Order CancelledCustomerA pre-order is cancelled
Admin Pre-Order CancelledAdminA pre-order is cancelled
Pre-Order Date ChangedCustomerThe release date for a product is changed

Manually Resend an Email

  1. Open the WooCommerce order.
  2. In the Order actions box (top right), select the email action from the dropdown.
  3. Click the send button (►) to dispatch the email immediately.

9. Customer Experience

9.1 Product Page

When a product has pre-orders enabled, customers see:

  • Availability message below the price (customizable in Settings).
  • "Pre-order now" button instead of "Add to cart".
  • Slots remaining notice if a quantity limit is set and fewer than 10 slots remain.
  • Sold-out notice if the quantity limit has been reached.

9.2 Cart & Checkout

  • Pre-ordered items are labeled with their release date in the cart.
  • Payment timing text is displayed (e.g., "$49.00 charged January 15, 2026").
  • If a deposit is configured, the cart shows the deposit amount and remaining balance.
  • The checkout button reads "Place pre-order now" (customizable).
  • Only one pre-order product can be in the cart at a time.

9.3 My Account — Pre-Orders

  1. Customer logs in and goes to My Account.
  2. Clicks the Pre-Orders tab in the account menu.
  3. Sees a list of pre-orders with status, product, release date, and order total.
  4. Can click Cancel to cancel an active pre-order (if permitted).

9.4 Countdown Timer Shortcode

Embed a live countdown to the release date anywhere on your site:

[npom_countdown]

Works in pages, posts, sidebar widgets, and theme templates. If no release date is set, the shortcode outputs nothing.

10. Automated Release (WP-Cron)

The plugin uses WordPress's built-in scheduling system (WP-Cron) to automatically process pre-orders when a release date arrives.

What happens at release

  • All active pre-orders for that product are marked as completed.
  • "Upon release" orders are charged (saved payment method) or sent a payment link email.
  • Follow-up balance orders are created for deposit-based pre-orders.
  • Pre-Order Available emails are sent to all customers.
  • Order statuses transition to "Processing" (physical) or "Completed" (virtual/downloadable).
⚠

WP-Cron relies on website traffic to trigger. On low-traffic sites, releases may be delayed. For reliable, time-critical releases, set up a real server cron job.

Set Up a Real Server Cron Job

Using cURL:

# Runs every 5 minutes
*/5 * * * * curl -s https://yourdomain.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Using WP-CLI:

*/5 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1

11. WooCommerce Blocks Compatibility

BlockSupport
Cart BlockPre-order items display correctly with availability messages and pricing
Checkout BlockFull pre-order checkout flow; payment timing text displayed
Product Block EditorPre-Orders product tab available in the block-based product editor

No additional configuration is required. Block compatibility is auto-detected.

12. HPOS Compatibility

WooCommerce High-Performance Order Storage (HPOS / Custom Order Tables) is fully supported. The plugin:

  • Declares HPOS compatibility via the official FeaturesUtil API.
  • Stores all pre-order meta in both the classic wp_postmeta table and the HPOS wc_orders_meta table.
  • All queries (quantity limit counts, dashboard stats, CSV export) use HPOS-aware SQL automatically.
💡

You don't need to take any action — compatibility is automatic regardless of whether HPOS is enabled or disabled on your store.

13. WooCommerce Subscriptions Compatibility

Requires WooCommerce Subscriptions 6.2.0 or later. Supported types: subscription, variable-subscription.

  • Customers place a pre-order for a subscription product.
  • No subscription charge is taken at checkout (uses the "upon release" flow).
  • When the product releases, the subscription begins and the first payment is collected.
⚠

Subscription products with synchronized billing or trial periods cannot have their pre-order settings changed while those features are active. A notice is shown on the product edit page when these conditions are detected.

14. For Developers — Hooks Reference

Action Hooks

HookArgumentsDescription
npom_admin_page_actions—Fires in the Pre-Orders admin page header. Used to add buttons.
npom_product_options_start$post_idFires at the start of the Pre-Orders product tab panel.
npom_product_options_end—Fires at the end of the Pre-Orders product tab panel.
npom_save_product_options$post_id, $is_enabled, $timestampFires when a product with pre-order settings is saved. Use priority 10, 3.
npom_pre_order_completed$orderFires when a pre-order is completed/released.
npom_pre_order_cancelled$orderFires when a pre-order is cancelled.
npom_pre_order_date_changed$order, $messageFires when a product's release date is changed.
npom_pre_ordered$orderFires when a new pre-order is placed.
npom_pre_order_available$orderFires when a pre-ordered product becomes available.
wc_pre_order_status_new_to_active$orderFires when a pre-order moves from new to active status.
wc_pre_order_status_active_to_cancelled$orderFires when a pre-order is cancelled.

Filter Hooks

HookArgumentsDescription
npom_settings$settingsFilter the global settings array to add/remove settings fields.
npom_supported_product_types$typesFilter the list of supported product type slugs.
npom_admin_script_data$data, $hook_suffixFilter the data passed to the admin JavaScript.

Order Meta Keys

_npom_is_pre_order

1 if the order is a pre-order

_npom_status

active, completed, or cancelled

_npom_when_charged

upfront or upon_release

_npom_deposit_paid

Deposit amount paid (empty string if no deposit)

_npom_remaining_balance

Balance due on release

_npom_original_price

Original product price before deposit reduction

Product Meta Keys

_npom_enabled

yes if pre-orders are enabled

_npom_availability_datetime

Unix timestamp of the release date

_npom_when_to_charge

upfront or upon_release

_npom_fee

Optional pre-order fee amount

_npom_max_quantity

Maximum pre-orders allowed (0 = unlimited)

_npom_deposit_type

none, fixed, or percent

_npom_deposit_value

The deposit amount or percentage

Code Examples

Add a custom field to the Pre-Orders product tab

// Render the field
add_action( 'npom_product_options_end', function() {
    woocommerce_wp_text_input( array(
        'id'    => '_my_custom_preorder_field',
        'label' => __( 'My Custom Field', 'my-plugin' ),
    ) );
} );

// Save the field (3 accepted args required)
add_action( 'npom_save_product_options', function( $post_id, $is_enabled, $timestamp ) {
    if ( isset( $_POST['_my_custom_preorder_field'] ) ) {
        update_post_meta(
            $post_id,
            '_my_custom_preorder_field',
            sanitize_text_field( wp_unslash( $_POST['_my_custom_preorder_field'] ) )
        );
    }
}, 10, 3 );

Add a custom button to the Pre-Orders admin page

add_action( 'npom_admin_page_actions', function() {
    $url = admin_url( 'admin.php?page=npom_manager&action=my_action' );
    printf(
        '<a href="%s" class="page-title-action">%s</a>',
        esc_url( $url ),
        esc_html__( 'My Action', 'my-plugin' )
    );
} );

Run code when a pre-order is completed

add_action( 'npom_pre_order_completed', function( $order ) {
    // $order is a WC_Order object
    $product_id = NPOM_Order::get_pre_order_product( $order )->get_id();
    // your logic here...
} );

15. Troubleshooting

Pre-orders are not releasing automatically

Cause

WP-Cron is not running reliably, or automatic processing is disabled.

Fix

  • Confirm the release date is in the past (in your store's timezone).
  • Go to WooCommerce → Settings → Pre-Orders → Test site settings and confirm Disable automatic pre-order processing is unchecked.
  • Set up a real server cron job (see Section 10).
  • Use WP Crontrol plugin to manually trigger npom_completion_check and confirm it fires.
The Pre-Orders product tab is not visible

Cause

Unsupported product type, or stale cache.

Fix

  • Confirm the product type is in the supported list (see Section 4.1).
  • Clear any caching plugins and reload the product edit page.
  • Confirm the plugin is active in Plugins → Installed Plugins.
I can't change a product's pre-order settings

Cause

The product has active pre-orders. Settings are locked to prevent inconsistencies.

Fix

Go to WooCommerce → Pre-Orders, filter by that product, then complete or cancel all active pre-orders. Once no active pre-orders remain, settings become editable.

The deposit amount is not being applied in the cart

Cause

Session or caching conflict.

Fix

  • Confirm Deposit type is set to Fixed or Percentage (not "None") on the product.
  • Clear your WooCommerce session (log out, clear cookies, log back in).
  • Disable any page caching plugins temporarily and retest.
  • Ensure no other plugin overrides woocommerce_before_calculate_totals at a very high priority.
CSV export is downloading an empty file

Cause

No pre-orders exist, or a PHP output buffering conflict.

Fix

  • Confirm at least one pre-order exists in WooCommerce → Pre-Orders.
  • Deactivate caching plugins temporarily and retry.
  • Check your server's PHP error log for any output before the CSV headers.
Email notifications are not being sent

Cause

The email is disabled in WooCommerce settings, or SMTP is misconfigured.

Fix

  • Go to WooCommerce → Settings → Emails and confirm the relevant email is enabled.
  • Use a plugin like WP Mail SMTP to verify your outgoing mail configuration.
  • Test with the Send test email feature in WooCommerce email settings.
Quantity limit is not enforcing correctly

Cause

HPOS configuration mismatch.

Fix

  • Check HPOS status: WooCommerce → Settings → Advanced → Features → High-Performance Order Storage.
  • If you recently switched between HPOS and classic storage, run WooCommerce → Status → Tools → Sync order data.

16. Frequently Asked Questions

Can customers pre-order multiple products at once?

No. By default, only one pre-order can be in the cart at a time. This prevents payment timing conflicts when different products have different payment models.

What happens if a customer has a deposit order and the product is cancelled?

The original order (deposit) is cancelled. You will need to manually refund the deposit from the WooCommerce order screen. The plugin does not issue automatic refunds.

Can I change the release date after a pre-order is placed?

Yes. Update the product's release date and save. The plugin fires the npom_pre_order_date_changed action and sends a Pre-Order Date Changed email to all customers with active pre-orders for that product.

Does the quantity limit count cancelled pre-orders?

No. Only orders with an active pre-order status count toward the limit. Completed and cancelled orders are excluded.

Is the plugin compatible with WooCommerce HPOS?

Yes, fully. All order queries, meta reads, and meta writes are HPOS-aware and automatically use the correct table depending on your store configuration.

Will the plugin work if WooCommerce Subscriptions is not installed?

Yes. Subscriptions compatibility is detected at runtime. If Subscriptions is not installed, subscription product types are simply not added to the supported list. All other features work normally.

Can I translate the plugin into my language?

Yes. The plugin is fully translation-ready. All strings use the nextxen-pre-order-manager text domain. Place your .po/.mo files in /wp-content/languages/plugins/.

Is the CSV export secure?

Yes. The export URL includes a WordPress nonce, and the handler verifies both the nonce and the manage_woocommerce capability before streaming any data.

What role is required to manage pre-orders?

The manage_woocommerce capability, which is assigned to the Shop Manager and Administrator roles by default.

Where can I get support?

Visit Contact NEXTXEN to submit a support request. Full documentation is available at nextxentech.com/docs/nextxen-pre-order-manager-for-woocommerce.