The order-splitting, per-address shipping-cost and destination-based tax handling that this plugin still relies on were created by Vinos de Frutas Tropicales (lat9), Copyright © 2014-2019. Original support thread at the Zen Cart forums: Multiple Ship-To Addresses Support Thread.
Version 3.0.0, which repackages the plugin as an encapsulated zc_plugin and rebuilds the checkout flow, Copyright © 2026 My Zen Cart Host (dbltoe).
This plugin changes how an order is built, so it has to coexist carefully with anything else that does. As of v3.0.0 most of those interactions are handled for you rather than left as a warning:
ot_coupon is removed from checkout for those orders only.What the customer sees depends on which kind of free shipping you run. The Free Options and Free Shipping shipping modules decide when the order is quoted, so if one of those is the method the customer picked, the split produces no quote at all: the addresses are marked with a warning and checkout will not continue until they choose a different method. The Allow Free Shipping setting inside the Shipping order-total module decides later, after the quote, so nothing is blocked — the order simply completes with shipping charged on each address, even though the shopping-cart page had said shipping was free.
That second one is the one to watch, because it costs the customer money quietly. If you offer free shipping over a threshold and you enable multiple addresses, either say so in your shipping policy or set the threshold low enough that a split order still clears it. Or judge the whole order instead: Multiple Ship-To Addresses Pro, a paid companion to this plugin, applies the threshold to the full cart and takes the shipping off every address when it passes — and picks the cheapest carrier for each address while it's at it.
Still untested against this version, and worth asking about before relying on them: Super Orders, Ty Package Tracker, and Fast and Easy Checkout. If you have a question about another plugin's compatibility, please ask on the support thread.
This plugin lets a customer send the individual products in one order to two or more different addresses. The order is split into per-address sub-orders, each quoted, taxed, tracked and status-updated independently, while the customer pays once.
No core files are changed, and no template files are overwritten. That is the headline difference in v3.0.0. Earlier versions shipped replacement copies of Zen Cart core files and of your template's checkout templates, which had to be merged by hand and re-merged after every Zen Cart upgrade. This version is an encapsulated zc_plugin: everything lives under /zc_plugins/MultiShip/, it installs and uninstalls from the admin's Plugin Manager, and a Zen Cart upgrade cannot overwrite any of it because none of it sits in Zen Cart's own directories.
The practical consequences for you:
YOUR_TEMPLATE or YOUR_ADMIN directories to rename.That care stops at the inbox. A multiship order also notifies the customer, and it does so through Zen Cart's own order emails rather than any of its own — so those emails carry the stock /email/header.jpg banner Zen Cart ships with, unless you have replaced it with your own artwork. A customer who has just come through pages that look like your store then opens mail that does not. Worth reading The image at the top of your emails before you go live, because this plugin sends more of that mail than your store does now — one per parcel, not one per order.
Developed and tested against Zen Cart 2.3 with the ZCA Bootstrap template, and declared compatible with Zen Cart 2.0.0 through 2.3.0. It has not been run against a Zen Cart 3.0.0 store.
Installing the plugin from the Plugin Manager creates two tables in your Zen Cart database:
It also adds one column to your existing orders_products table, recording which sub-order each product line belongs to, and registers the invoice_multiship and packingslip_multiship pages plus its own configuration menu entry.
Under Configuration → Multiple Ship-to Addresses:
/logs/multiship_YYYYMMDD.log. Off by default. Turn it on before reporting a problem.There is no store-wide on/off switch. Installing the plugin is the decision to use it; uninstall it from the Plugin Manager to turn it off.
The plugin goes to some trouble to look like your store: it imposes no colors or typefaces of its own, taking both from your template so its pages sit inside your design rather than beside it. None of that reaches the customer's inbox. Order emails are Zen Cart's own, and they open with a file most store owners have never looked at.
Worth knowing before you take multiship orders, because this plugin will make you send more email than you do now. Each sub-order has its own status, so a customer who split an order across three addresses gets three "your order has shipped" emails rather than one. Whatever sits at the top of those appears once per parcel — and on most stores, what sits there is a file the owner has never seen.
Zen Cart ships /email/header.jpg, a 550×110 banner, and puts it at the top of every HTML email your store sends. The constants controlling it live in /includes/languages/english/lang.email_extras.php:
EMAIL_LOGO_FILENAME — header.jpgEMAIL_LOGO_WIDTH / EMAIL_LOGO_HEIGHT — 550 / 110EMAIL_LOGO_ALT_TEXT — Brand LogoEMAIL_LOGO_ALT_TITLE_TEXT — Zen Cart! The Art of E-commerceRead that last one again. Until it is changed, every HTML email your store sends carries Zen Cart's branding in the image tooltip, over your logo, under your domain.
Why you may never have noticed. Two switches both have to be on before anyone sees it. The store's — Configuration → E-Mail Options → Send E-Mails in HTML format — and the customer's, because each account carries its own email-format preference and one set to Plain Text gets plain text regardless. A store can run for years with the stock banner going to the subset of customers who have HTML enabled, while the owner, testing with a plain-text account, sees nothing.
What to do. Replace /email/header.jpg with your own artwork at the same dimensions — same filename, same size, nothing else to change. If your logo is a different shape, adjust the width and height constants and fix the alt and title text while you are there. If you would rather send no banner, a transparent image at those dimensions is safer than deleting the file, which leaves a broken-image icon.
What this plugin does about it: nothing, deliberately. Multiship sends no email of its own — it lets Zen Cart's order-status machinery do the sending, so a sub-order email looks exactly like every other email your store sends. If you have set that banner up, these emails use it. If you have not, these emails are no worse than the rest of your mail, and the fix above fixes all of them at once rather than just ours.
A customer who does not want multiple addresses sees your store's ordinary checkout, unchanged. Everything below happens only once they ask for it.
Checkout is three steps, the same number as an ordinary Zen Cart order. In v2.0.0 a multiship customer went through five; the shipping-method choice has since moved onto the address page, and the page that used to exist only to confirm that choice is gone.
Being asked. When a cart could be split — two or more shippable items, a registered customer, shipping available — clicking Checkout presents a short page offering three choices: carry on with normal checkout, send the items to different addresses, or go back and keep shopping. It is asked once per order. Declining is remembered, and so is accepting — a customer who changes their mind can leave multiship from the address page at any point before paying.
If your store also offers PayPal Express Checkout or a similar one-click button from the cart page, a notice appears on the cart itself as well, because a customer who presses that button leaves before the question can be asked.
After the order is placed, the same breakdown appears on the order-received page, so the customer's receipt records which parcel went where.
A customer who is not signed in when they choose multiple addresses is sent to log in first, and told why, since multiship needs a saved address book.
When a customer has placed an order with Multiple Ship-To Addresses, that order's display within the customer's account-related pages changes to reflect the multiple addresses:
There are no core-file overwrites and no template overrides. You should still back up your database and files before installing anything, but there is nothing to merge.
zc_plugins/MultiShip folder into your store's zc_plugins directory, so that you end up with /zc_plugins/MultiShip/v3.0.0/ containing manifest.php. Nothing goes anywhere else — do not copy anything into /includes/ or into your admin directory.Product weights matter more than they used to. Multiship quotes shipping separately for each address, so it exposes gaps in your product data that a single-address order hides.
A product with no weight is already quoted wrongly on every order you take — but a single-address order absorbs that error into one total where nobody notices. Split the same cart across three addresses and the same missing weight produces three visibly wrong quotes. The same applies to dimensions, which newer carrier modules use for dimensional weight.
Nothing in this plugin can compensate for missing data, and it deliberately does not try: a guessed weight is worse than a visibly wrong one, because it looks right. If you are about to enable multiship, audit the weights on anything bulky first.
One thing you do not need to worry about: a sub-order heavier than your carrier's limit. Zen Cart splits a consignment into multiple boxes once it exceeds SHIPPING_MAX_WEIGHT, and because multiship quotes each address independently, that calculation is done per address. Three heavy items going to one recipient are boxed on their own weight, not the whole order's.
Upgrading from v2.x: install this version from the Plugin Manager, then delete the individual files the older version had you copy into /includes/ and your admin directory, and restore your own copies of any core or template files you merged its changes into. Your existing multiship orders are not affected — the database tables are the same, and the installer leaves existing data alone.
orders_multiship_id column from orders_products, removes the configuration group and its settings, and de-registers the invoice and packing-slip pages./zc_plugins/MultiShip/ from your file system.There is no SQL patch to run and nothing to restore, because nothing outside /zc_plugins/ was ever changed.
Read this before you uninstall. The uninstall is thorough, and that cuts both ways: it discards the record of which items went to which address on every multiship order you have ever taken. The orders themselves remain, with their products, totals and payment details intact, but the per-address breakdown is gone for good — from the customer's order history, from your invoices and packing slips, and from the database. It cannot be recovered by reinstalling, because the column tying each product line to its sub-order is dropped along with the tables.
If any of that history matters — and it will if you have unshipped multiship orders on the books — take a full database backup first, and do not uninstall until those orders have been delivered.
File lists below are marked [+] added, [-] removed, [template] a file in your active template, and [core] a Zen Cart core file. Each marker is a word as well as a color, so the list reads the same whether or not the colors do.
NOTIFY_MULTISHIP_QUOTE_ADDRESS and NOTIFY_MULTISHIP_VALIDATE_ADDRESS fire before each address is quoted, with the quote passed by reference so an observer can supply its own; NOTIFY_MULTISHIP_INITIALIZE_END fires once every address is priced, with the per-address and order-level totals passed by reference; and NOTIFY_HEADER_END_CHECKOUT_MULTISHIP now carries two variables that let an observer hide the shipping-method choice and put a note in its place. They exist for Multiple Ship-To Addresses Pro. With no observer attached, nothing about this plugin's behavior changes.zc_plugin. No core files are changed and no template files are overwritten. Everything lives under /zc_plugins/MultiShip/ and installs, upgrades and uninstalls from the Plugin Manager. The YOUR_TEMPLATE and YOUR_ADMIN directories, the merge-by-hand instructions and uninstall_multiship.sql are all gone.documentElement.className outright rather than appending to it, which left the confirmation, payment and order-received pages without their layout.pluginId was 0, so the online version check could never match and store owners were never told a newer release existed.multiship_names.php)/YOUR_ADMIN/orders.php)