Milo Split Shipping

Different billing and shipping schedules on the same subscription: charge annually, ship monthly, with $0 shipment orders created automatically for your fulfillment team.

Installation

  1. Install and activate the free Milo Subscriptions plugin (WooCommerce is required).
  2. Upload and activate Milo Split Shipping (Plugins → Add New → Upload).
  3. Enter your license key under Subscriptions → Licenses to enable updates.

Configuration

Under Subscriptions → Settings → Checkout & Payments → Split Shipping:

Setting Description
Enable split shipping schedules On/off switch (on by default). Shows the split shipping fields on subscription products.

Product setup

Edit a subscription product and find the Split Shipping Schedule section in the subscription product data panel:

Field Description
Separate shipping schedule Checkbox. Turns on independent shipping for this product.
Ship every Interval, 1 to 6.
Shipping period Day(s), Week(s), Month(s), or Year(s).

Example: a product billed yearly with “Ship every 1 Month(s)” charges once a year and creates a shipment order every month.

How shipments work between billings

When a customer buys a split-shipping product, the schedule is copied from the product onto the subscription and the first shipment is scheduled one shipping interval after the subscription start date. From there, every time a shipment fires the next one is scheduled one interval later, independent of the billing cycle.

Each shipment is a regular WooCommerce order:

  • Status Processing, total $0.00, so it lands straight in your fulfillment queue without charging anyone.
  • Line items and quantities are copied from the subscription (at $0) as a packing reference, along with the shipping method and the customer’s billing and shipping addresses.
  • The order is linked back to the subscription, and a “Shipment order #X created” note is added to the subscription.

Because shipping is handled by these shipment orders, renewal (billing) orders have their shipping items removed automatically, with an order note explaining why. Shipments run on Action Scheduler (the milo_split_shipping_create_shipment action, visible under Tools → Scheduled Actions).

Status handling

  • On hold, cancelled, or expired: the pending shipment action is removed; no more shipment orders are created.
  • Reactivated: shipping resumes. If the stored next-shipment date is already in the past, it is recalculated from the current date.
  • Pending cancel: shipments already due still fire until the subscription actually ends; nothing is scheduled past the end date.

What customers and admins see

  • My Account → Subscriptions → View: a “Shipping Schedule” table (ships every, next shipment date while active) and a “Shipment Orders” history table listing the last 10 shipment orders with date and status.
  • Admin subscription detail: a “Shipping Schedule” sidebar panel with the cadence and the next shipment date.

Email notification

Each time a shipment order is created, the customer receives a Shipment Order Created email with the order number, item list, and shipping address. Customize or disable it under WooCommerce → Settings → Emails; the template can be overridden in your theme like any WooCommerce email.

FAQ

Does the shipment order charge the customer? No. Shipment orders are always $0; payment only happens on the billing schedule’s renewal orders.

What if a product has multiple subscription items? The schedule is taken from the first line item that has split shipping enabled.

Can I trigger a shipment manually? Yes, run the pending milo_split_shipping_create_shipment action from Tools → Scheduled Actions; the next shipment is rescheduled automatically.

For developers

The milo_split_shipping_shipment_created action fires after each shipment order is created, receiving the shipment order and the subscription. Shipment orders carry the _milo_is_shipment_order meta and _milo_shipment_for_subscription (the subscription ID), handy for filtering them in exports or fulfillment integrations.

Billing modes

Requires WooCommerce; not available in standalone (Stripe-driven) mode.

Did this page miss something?

Tell us and we rewrite it, usually the same day.

Send a note