Quy tắc đơn hàng Shopify cho nhà phân phối: MOQ, thùng hàng và customer tag
Nhà phân phối cần quy tắc khác cửa hàng lẻ — số lượng tối thiểu (MOQ), bội số theo thùng, và logic theo customer tag. Cách thiết lập trên Shopify mà không cần dev tùy chỉnh.

Vận hành cửa hàng bán buôn hoặc phân phối trên Shopify có những ràng buộc khác hẳn so với cửa hàng bán thẳng cho người tiêu dùng. Khách của bạn mua theo thùng, không mua lẻ. Họ cần số lượng đặt tối thiểu để việc vận chuyển mới có lãi. Và bạn thường có quy tắc khác nhau cho từng cấp khách — nhà phân phối một bộ số lượng tối thiểu, khách bán lẻ một bộ khác.
Thiết lập mặc định của Shopify không xử lý sẵn được những chuyện này. Nền tảng giả định mọi khách đều thấy cùng một trang sản phẩm với cùng quy tắc số lượng. Với nhà phân phối, đó là vấn đề.
Nhà phân phối thực sự cần gì
Hầu hết hoạt động phân phối chạy trên ba loại quy tắc mà Shopify chuẩn không có:
Số lượng đặt tối thiểu (MOQ) theo sản phẩm hoặc variant
Nhà phân phối mua chai thủy tinh có thể yêu cầu tối thiểu 24 chai vì đó là một thùng. Nhà phân phối thực phẩm có thể đặt MOQ 12 hũ. Điểm mấu chốt là mức tối thiểu nằm ở cấp sản phẩm, không phải cấp giỏ hàng — khách không thể thêm 3 chai và 21 hũ để đủ mức tối thiểu của cả giỏ.
Bội số theo thùng (quantity increments)
Nếu bạn bán theo thùng 6, thùng 12 hay thùng 24, thì ô chọn số lượng chỉ nên cho phép bội số của kích thước thùng đó. Khách chọn 12, 24, 36 — không phải 13, không phải 25.
Bộ quy tắc chuyển theo customer tag
Nhà phân phối cấp 1 của bạn có thể có mức đơn tối thiểu $500 và thùng 12 đơn vị. Khách bán lẻ cấp 2 có thể có mức tối thiểu $150 và thùng 6 đơn vị. Người tiêu dùng trực tiếp có thể không có mức tối thiểu nào cả. Quy tắc phải tự đổi theo người đang đăng nhập.
Vì sao Shopify mặc định không đủ
Shopify không có thiết lập gốc nào cho số lượng tối thiểu hay tối đa theo từng sản phẩm, trên bất kỳ gói nào. Cửa hàng Shopify Plus có thể áp một giá trị đơn hàng tối thiểu ở checkout thông qua một validation function, nhưng nó áp cho cả giỏ, không riêng theo từng sản phẩm. Vậy nên:
- Không có MOQ gốc theo sản phẩm/variant
- Không có bội số số lượng (case packs)
- Không có chuyển quy tắc theo customer tag
- Mức tối thiểu ở cấp checkout chỉ hoạt động trên Plus, và áp cho cả giỏ chứ không riêng từng sản phẩm
Với một catalog phân phối hàng trăm SKU trải qua nhiều cấp khách, những kẽ hở này cộng dồn thành duyệt đơn thủ công, email đi lại qua lại, và những đơn bị từ chối lẽ ra đã có thể chặn ngay ở giỏ hàng.
Cách triển khai quy tắc phân phối mà không cần code tùy chỉnh
Cách làm thực tế là dùng một rule engine ngồi ở giỏ hàng và checkout, đánh giá từng dòng hàng theo bộ quy tắc ứng với customer tag của khách đó.
1. Xác định bộ quy tắc theo customer tag
Bắt đầu bằng việc ánh xạ từng phân khúc khách sang một profile quy tắc:
| Customer tag | Loại MOQ | Case pack | Giá trị đơn tối thiểu |
|---|---|---|---|
distributor-tier-1 | Theo variant (vd: 24) | 12 | $500 |
distributor-tier-2 | Theo variant (vd: 12) | 6 | $250 |
retail-wholesale | Theo variant (vd: 6) | 6 | $150 |
vip-buyer | Không | 1 | $0 |
Lưu chúng trong một file JSON, một metafield trên khách hàng, hoặc một cấu hình app nhỏ. Phần quan trọng: quy tắc đi kèm customer tag, không đi kèm sản phẩm.
2. Áp MOQ ở cấp dòng hàng
Khi một khách có tag thêm sản phẩm vào giỏ, hãy kiểm tra MOQ của variant đó cho cấp của họ. Nếu họ nhập 6 nhưng MOQ là 12, hiển thị ngay một thông báo tại chỗ: "Số lượng tối thiểu cho mặt hàng này là 12 đơn vị (case pack 12 đơn vị)."
Việc này diễn ra ngay trong cart drawer hoặc trang giỏ hàng — trước checkout. Nó giúp tránh vòng lặp "đặt đơn → nhận email báo đơn bị từ chối → điều chỉnh → đặt lại".
3. Thực thi bội số số lượng
Ô chọn số lượng nên nhảy theo kích thước case pack. Nếu case pack là 12, ô chọn chạy 12, 24, 36, 48. Bạn có thể làm điều này bằng một đoạn JavaScript ghi đè lên form sản phẩm, hoặc để phần cart validation lo và báo lỗi nếu ai đó gõ tay số 13.
4. Validate ở checkout (lớp lưới an toàn)
Cart validation bắt được hầu hết vấn đề. Nhưng một khách quyết tâm vẫn có thể lách qua giỏ hàng. Trên Shopify Plus, một checkout validation function có thể kiểm tra lại từng dòng hàng ở checkout và chặn đơn nếu không đạt quy tắc.
Với cửa hàng không dùng Plus, cart validation là cổng chính của bạn. Hầu hết khách sẽ không cố lách qua nó.
Các trường hợp biên thường gặp
Giỏ hàng hỗn hợp: sản phẩm phân phối + sản phẩm bán lẻ
Nếu một nhà phân phối đã đăng nhập thêm cả SKU bán buôn lẫn SKU bán lẻ, hãy áp quy tắc phân phối cho SKU bán buôn và quy tắc bán lẻ cho SKU bán lẻ. Gắn tag wholesale hoặc retail cho sản phẩm để logic biết dùng bộ quy tắc nào.
Khách không có tag
Mặc định về bộ quy tắc chặt chẽ nhất, hoặc về không quy tắc nào. Quyết định dựa trên việc bạn có muốn buộc khách tạo tài khoản trước khi đặt hàng bán buôn hay không.
Giá theo bậc số lượng
Nếu bạn có giá theo bậc (từ 12 đơn vị = $5/đơn vị, từ 24 đơn vị = $4.50), đó là một lớp giá riêng. Quy tắc số lượng chỉ đảm bảo khách đặt theo đúng bội số hợp lệ; còn engine tính giá lo phần giảm giá.
Những điều nên tránh
- Ghi cứng MOQ vào mô tả sản phẩm — khách bỏ lỡ, và support nhận ticket.
- Dùng "số lượng tối đa" để thay cho case pack — mức tối đa 24 không thực thi được bội số của 12.
- Chỉ dựa vào checkout validation — đến lúc đó khách đã bỏ công sức và dễ bỏ giỏ hơn là sửa.
- Tự xây một app riêng cho việc này — một app order limit chuyên biệt xử lý được MOQ, case pack và quy tắc theo tag mà không kèm gánh nặng bảo trì.
Câu hỏi thường gặp
Có thể đặt MOQ khác nhau cho cùng một sản phẩm ở các nhóm khách khác nhau không?
Được. MOQ nằm trong bộ quy tắc của từng customer tag, không nằm trên bản thân sản phẩm. Sản phẩm A có thể có MOQ 24 cho distributor-tier-1 và MOQ 12 cho retail-wholesale.
Cách này có hoạt động với Shopify Markets / tính năng B2B không?
Các tính năng B2B gốc của Shopify (company accounts, catalogs, payment terms) chỉ có trên Plus. Các B2B catalog có hỗ trợ quy tắc số lượng theo từng variant — tối thiểu, tối đa và bội số — cùng với volume pricing, nên nếu khách của bạn được thiết lập thành B2B company trên Plus, phần đó có thể đã bao được MOQ và case pack. Nếu bạn không dùng Plus, hoặc bạn phân khúc khách theo customer tag thay vì theo company account, bạn vẫn cần một lớp validation ở giỏ hàng/checkout.
Nếu một khách có nhiều tag thì sao?
Định nghĩa một thứ tự ưu tiên cho các tag (ví dụ: distributor-tier-1 > retail-wholesale > vip-buyer) và áp bộ quy tắc của tag khớp có ưu tiên cao nhất.
Có thể hiển thị MOQ trên trang sản phẩm trước khi khách thêm vào giỏ không?
Được — đọc customer tag qua Liquid hoặc Storefront API, tra MOQ cho cặp tag/sản phẩm đó, và hiển thị gần ô chọn số lượng. "Tối thiểu bán buôn: 12 đơn vị (thùng 12 đơn vị)."
Cách này chỉ dành cho cửa hàng Plus à?
Validation ở cấp giỏ hàng thông qua một app hoạt động trên mọi gói. Tự xây một checkout validation Function riêng thì cần Plus. Hầu hết cửa hàng thấy cart validation là đủ — khách gặp lỗi ở giỏ hàng thường sửa trước khi tới checkout.
Cần thiết lập MOQ, case pack và quy tắc theo tag cho cửa hàng Shopify của bạn? Nexo Order Limits xử lý cả ba mà không cần dev tùy chỉnh.