WP Manifestindependent plugin directory
manifest / ecommerce / woo-custom-order-rules

Woo Custom Order Rules

Demo: upgrade-safe custom WooCommerce plugin — tiered & mix-and-match discounts, validated checkout field stored as order meta, order-status business logic. Documented hooks only, no custom tables, HPOS-compatible. Runs live in WordPress Playground.

by Chris Conradie (Naviel Labs) · github.com/cfconradie/woo-custom-order-rules · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/cfconradie/woo-custom-order-rules/archive/refs/heads/main.zip

Readme

Woo Custom Order Rules

A small, installable WooCommerce plugin that demonstrates the upgrade-safe way to add custom business logic to a store: documented hooks only, custom data stored as order and product meta (never a custom table), checkout fields added through the WooCommerce fields API with server-side validation (never template overrides), and behaviour driven off the order lifecycle. It is also HPOS-compatible (reads and writes order data through the CRUD API).

This is a portfolio demo — a clean reference implementation of the patterns I use for real custom WooCommerce work.

Live demo

Runs entirely in your browser via WordPress Playground (WordPress + WooCommerce + this plugin + a seeded catalogue, no install):

https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/cfconradie/woo-custom-order-rules/main/blueprint.json

Log in at /wp-admin as admin / password. Add several bundle products to the cart to watch the discounts apply, then place an order with a PO number and move it to Processing to see the status-driven logic fire.

What it does

# Feature Documented hook(s) Storage
1 Tiered quantity discount (buy 5+ save 10%, 10+ save 15%) woocommerce_before_calculate_totals — (runtime price)
1 Mix & Match bundle (any 10 group items = 15% off), shown on product + cart woocommerce_cart_calculate_fees, woocommerce_single_product_summary, woocommerce_before_cart product meta _wcor_bundle_group
2 Validated PO-number checkout field, saved to the order woocommerce_checkout_fields, woocommerce_checkout_process, woocommerce_checkout_create_order order meta _wcor_po_number
3 Flag PO / bundle-heavy orders for approval when they reach Processing woocommerce_order_status_changed order meta _wcor_approval_required
Show the custom meta on the admin order screen woocommerce_admin_order_data_after_billing_address reads order meta

Why it stays upgrade-safe

  • Documented action/filter hooks only — no core template overrides, no hooking of WooCommerce internals that shift between releases.
  • Order and product meta, not custom tables — nothing to migrate, nothing that breaks when WooCommerce changes its schema.
  • HPOS-declared — compatibility with High-Performance Order Storage is declared on before_woocommerce_init, and all order data goes through the CRUD API ($order->get_meta() / update_meta_data()), never get_post_meta on orders.
  • Isolated assets — the small notice stylesheet is enqueued only on WooCommerce pages.

Local development

Requires Docker. Uses @wordpress/env:

npx wp-env start          # WordPress + WooCommerce + this plugin, all activated
bash bin/seed.sh          # classic checkout + a seeded bundle catalogue
# store:  http://localhost:8888     admin:  http://localhost:8888/wp-admin  (admin / password)
npx wp-env stop

Screenshots

See docs/ — product-page discount hint, cart with the Mix & Match line, the checkout PO field, and the admin order screen with the approval flag + order note.

License

GPL-2.0-or-later.

Read the full README on GitHub →