πŸ“– Documentation

Traceify – Order Tracking
for WooCommerce

A branded order tracking page, courier shipment tracking, one-click WhatsApp updates, estimated delivery dates and HTML status emails. No API, no monthly fee.

● Version 1.0.2 ● WooCommerce 7.0+ ● WordPress 6.0+ ● HPOS Compatible ● GPL-2.0 Free
01 β€” Overview

What is Traceify?

Traceify replaces WooCommerce's plain order status lookup with a branded tracking page, and gives store owners simple tools to keep customers updated β€” courier tracking numbers, WhatsApp messages, delivery estimates and branded emails.

Assets load only on the tracking page. The plugin uses vanilla JavaScript with no jQuery and makes no server-side external requests.

🧭Branded Tracking PageVisual timeline (Placed β†’ Processing β†’ Shipped β†’ Delivered), order summary, shipping address and customer notes.
πŸ”—One-Click Track ButtonA "Track Your Order" button in WooCommerce emails and My Account. Customers type nothing.
🚚Shipment TrackingAdd a courier and tracking number to any order. Customers get a "Track shipment" button on the tracking page and in emails.
πŸ’¬One-Click WhatsAppA WhatsApp column on the orders list and a meta box on each order. Uses free wa.me links β€” no Business API.
πŸ“…Estimated DeliveryAuto-calculated date range from processing and shipping days, with optional weekend exclusion.
βœ‰οΈBranded EmailsHTML status emails with per-status toggles and custom subject lines. Shipped is on by default.
βœ…
Order lookup requires both the order number and the billing email, which prevents order enumeration.
02 β€” Requirements

Requirements

RequirementMinimumTested up to
WordPress6.07.1
WooCommerce7.09.9
PHP7.4β€”
⚠️
WooCommerce must be active first. WordPress 6.5+ enforces this through the Requires Plugins header; on older versions Traceify refuses to activate and shows an error.
03 β€” Getting Started

Installation

1
Upload the plugin
Go to Plugins β†’ Add New β†’ Upload Plugin, choose traceify-for-woocommerce.zip and click Install Now.
2
Activate
On activation, Traceify creates a Track Your Order page containing the [traceify_tracker] shortcode and saves default settings.
3
Open settings
Go to WooCommerce β†’ Traceify. A red dot shows on the menu until you first open it.
4
Brand it
On the General tab set your store name, brand color and logo URL.
5
Add your WhatsApp number
On the WhatsApp tab enter the number with country code, digits only (for example 8801712345678), then save.
04 β€” Reference

File Structure

traceify-for-woocommerce/ β”œβ”€β”€ traceify-for-woocommerce.php ← Main file (headers, constants, boot) β”œβ”€β”€ uninstall.php ← Removes all data on delete β”œβ”€β”€ readme.txt β”œβ”€β”€ admin/ β”‚ β”œβ”€β”€ class-trcfy-admin.php ← Menu, settings, orders column, meta box β”‚ └── views/settings-page.php β”œβ”€β”€ includes/ β”‚ β”œβ”€β”€ class-trcfy-core.php ← Loader β”‚ β”œβ”€β”€ class-trcfy-installer.php ← Activation, defaults, uninstall β”‚ β”œβ”€β”€ class-trcfy-order-tracker.php ← Lookup & timeline β”‚ β”œβ”€β”€ class-trcfy-order-status.php ← Registers the Shipped status β”‚ β”œβ”€β”€ class-trcfy-shipment-tracking.php ← Couriers, tracking number, meta box β”‚ β”œβ”€β”€ class-trcfy-track-button.php ← Track button for emails & My Account β”‚ β”œβ”€β”€ class-trcfy-whatsapp.php ← wa.me links & placeholders β”‚ β”œβ”€β”€ class-trcfy-delivery-estimator.php β”‚ └── class-trcfy-email-notifier.php β”œβ”€β”€ public/ β”‚ β”œβ”€β”€ class-trcfy-public.php ← Shortcode & assets β”‚ └── views/tracking-page.php β”œβ”€β”€ templates/email-notification.php β”œβ”€β”€ languages/ β”œβ”€β”€ assets/ css/admin.css Β· css/public.css Β· js/admin.js Β· js/public.js └── index.php ← "Silence is golden" file in every folder
05 β€” Features

Tracking Page

Customers enter their order number and billing email. If both match, they see the order's status timeline, estimated delivery, shipment tracking details, items with thumbnails, totals, shipping method, shipping address and any customer notes you added.

Timeline mapping

WooCommerce statusTimeline step
pending Β· on-hold1 β€” Order Placed
processing2 β€” Processing
shipped3 β€” Shipped
completed4 β€” Delivered
cancelled Β· refunded Β· failedSingle special step
πŸ’‘
WooCommerce has no built-in shipped status, so Traceify registers wc-shipped for you. If another plugin has already registered that slug, Traceify steps aside and uses it.
06 β€” Features

Shipment Tracking

Add a courier and tracking number to any order from the Shipment Tracking meta box on the order screen, then click Update. The customer sees the courier, the number and a Track shipment button that opens the courier's own tracking page.

  • Built-in couriers β€” DHL, FedEx, UPS, USPS and Steadfast.
  • Custom courier β€” under Traceify β†’ Shipment Tracking enter a name and a tracking URL such as https://example.com/track?id={tracking_number}. The URL must start with http:// or https://. Without {tracking_number} the link opens the courier's landing page as-is.
  • Where it appears β€” the tracking page, Traceify emails and WhatsApp messages.
  • Auto-mark as Shipped β€” optional. When a tracking number is first added to a Processing order, Traceify moves it to Shipped.
πŸ’‘
The tracking number is saved before WooCommerce saves the status, so a status email sent on the same click already contains it.
07 β€” Features

Track Order Button

Traceify adds a one-click tracking link to the places customers already look. It is on by default and needs no template changes.

  • WooCommerce emails β€” a "Track Your Order" button after the order table in the Processing, On hold and Completed emails. Plain-text emails get a simple link line. Store-owner emails are never touched.
  • My Account β†’ Orders β€” a "Track" button next to each order, except Cancelled, Refunded and Failed orders.

How the link works

The link contains the order ID and WooCommerce's own order key, for example /track-your-order/?trcfy_order_id=123&trcfy_key=wc_order_…. The key is compared with hash_equals(), so the customer sees their order without typing anything and the billing email never appears in a URL. If the link is wrong, the customer sees the normal lookup form with a short message.

πŸ’‘
Links that contain an order key are sent with Referrer-Policy: same-origin, and result pages tell caching plugins not to cache them. Analytics tools that record the full page URL will still see the key, so exclude the tracking page from analytics if that matters to you.

Settings

Go to Traceify β†’ General β†’ Track Order Button to turn the email button and the My Account button on or off separately.

Choose which emails get the button

add_filter( 'trcfy_track_button_email_ids', function ( $ids ) { $ids[] = 'customer_invoice'; // also add it to the customer invoice email return $ids; } );
08 β€” Features

WhatsApp Updates

Traceify builds free wa.me links with a pre-filled message. Clicking opens WhatsApp on your device; you tap Send. Nothing is sent automatically.

  • Orders list β€” a πŸ’¬ column with a πŸ“² button per order.
  • Order detail β€” a WhatsApp Update meta box with the customer phone and message preview.
  • Tracking page β€” an optional customer button to chat with your store.

Message placeholders

PlaceholderReplaced with
{customer_name}Billing first name
{order_number}Order number
{order_status}Status label
{order_total}Formatted total (plain text)
{store_name}Store display name from settings
{tracking_url}Permalink of the tracking page
{tracking_number}Shipment tracking number (blank if none)
{tracking_link}Courier "Track shipment" link (blank if none)
{courier_name}Courier name (blank if none)
βœ…
Templates exist for Pending, Processing, On Hold, Shipped, Completed and Cancelled. If a status has no template, the Processing template is used.
09 β€” Features

Estimated Delivery

When an order moves to Processing (or is created already in Processing), Traceify stores a delivery date range on the order. The dates are calculated from the order date:

// min date order date + processing days + min shipping days // max date order date + processing days + max shipping days // weekends are skipped when "Exclude weekends" is on

The range shows on the tracking page with a countdown such as β€œ3 days remaining”, and in emails. Dates already stored on an order are never overwritten.

10 β€” Features

Email Notifications

Branded HTML emails are sent on status change at priority 20, after WooCommerce's own emails. They use your brand color and logo, list the items, include the courier and tracking number when one is set, and link to the tracking page.

StatusDefaultReason
ShippedonWooCommerce has no default email for it
Processing Β· Completed Β· On Hold Β· CancelledoffWooCommerce already sends these

Subjects accept the same placeholders as WhatsApp messages. Leave a subject blank to use the built-in default.

11 β€” Developer

Shortcode

Place the tracking form on any page or post. It takes no attributes.

[traceify_tracker]

Stylesheet and script load only on the assigned tracking page or on any page whose content contains the shortcode. In a theme template use echo do_shortcode( '[traceify_tracker]' );.

12 β€” Reference

All Settings

Each setting is a separate WordPress option prefixed trcfy_. Read one with get_option( 'trcfy_edd_processing_days', 1 ).

OptionDefaultDescription
trcfy_brand_color#7C3AEDBrand color for the page and emails
trcfy_store_namesite nameName shown in messages and emails
trcfy_brand_logo_url""Logo for the tracking page and emails
trcfy_tracking_page_idautoPage holding the shortcode
trcfy_wa_number""Your WhatsApp number, digits only with country code
trcfy_wa_show_customer_btnyesShow the chat button on the tracking page
trcfy_wa_customer_btn_labelChat with us on WhatsAppButton label
trcfy_wa_msg_{status}presetTemplate per status: pending processing on-hold shipped completed cancelled
trcfy_edd_enabledyesEnable delivery estimates
trcfy_edd_processing_days1Preparation days (0–30)
trcfy_edd_min_ship_days2Minimum transit days (1–60)
trcfy_edd_max_ship_days5Maximum transit days (1–60)
trcfy_edd_exclude_weekendsyesSkip Saturday and Sunday
trcfy_track_btn_emailyesAdd the Track Your Order button to WooCommerce customer emails
trcfy_track_btn_accountyesAdd a Track button to My Account β†’ Orders
trcfy_shipment_enabledyesEnable shipment tracking (meta box, tracking page, emails, WhatsApp)
trcfy_shipment_auto_shippednoMark a Processing order as Shipped when a tracking number is first added
trcfy_custom_courier_name""Name of your own courier
trcfy_custom_courier_url""Tracking URL; may contain {tracking_number}; must start with http(s)
trcfy_email_enabledyesMaster email toggle
trcfy_email_enabled_{status}shipped: yesPer-status toggle for processing on-hold shipped completed cancelled
trcfy_email_subject_{status}""Custom subject; blank uses the default
13 β€” Developer

Hooks & Data

Traceify 1.0.2 adds two filters, trcfy_couriers and trcfy_track_button_email_ids, and has no AJAX endpoints. The tracking page is a read-only GET request that needs either the order ID with its order key (email and My Account links) or the order number with the matching billing email. All other actions run through WordPress and WooCommerce hooks.

Filter: trcfy_couriers

Add or change couriers in code. Each courier needs a name and a url; the URL may contain {tracking_number}. Entries missing either value are ignored.

add_filter( 'trcfy_couriers', function ( $couriers ) { $couriers['pathao'] = array( 'name' => 'Pathao', 'url' => 'https://example.com/track?id={tracking_number}', ); return $couriers; } );

WordPress & WooCommerce hooks Traceify uses

HookUsed for
woocommerce_order_status_processingCalculate and store the delivery estimate
woocommerce_checkout_order_createdEstimate for orders created already in Processing
woocommerce_order_status_{status}Send branded emails (priority 20)
before_woocommerce_initDeclare HPOS and Cart/Checkout Blocks compatibility
initRegister the wc-shipped order status (priority 20)
woocommerce_email_after_order_tableAdd the Track Your Order button to customer emails (priority 20)
woocommerce_my_account_my_orders_actionsAdd the Track button to My Account β†’ Orders
send_headersSend Referrer-Policy: same-origin on order-key links
wc_order_statusesAdd Shipped after Processing in the status list
woocommerce_process_shop_order_metaSave courier + tracking number (priority 30), then optional auto-Shipped (priority 60)

Order meta

Meta keyValue
_trcfy_edd_minEarliest delivery date, Y-m-d
_trcfy_edd_maxLatest delivery date, Y-m-d
_trcfy_courierCourier key, e.g. dhl or custom
_trcfy_tracking_numberTracking number (max 100 characters)
πŸ’‘
The lookup does not use a nonce, so the tracking page works with page caching. Traceify defines DONOTCACHEPAGE on result pages, which most caching plugins respect. If yours does not, exclude URLs containing trcfy_ from the cache.
14 β€” Privacy

External Services

Traceify does not send store or customer data to any server run by the plugin author. It only creates links that open third-party sites when someone clicks them.

ServiceUsed forWhat is sent, and when
WhatsApp (wa.me)Customer chat button and one-click admin status updateThe phone number and a pre-filled message are placed in the link and sent to WhatsApp only when the link is clicked. Terms Β· Privacy
Courier websites"Track shipment" button (DHL, FedEx, UPS, USPS, Steadfast or your custom courier)The tracking number is placed in the link and sent to the courier only when the link is clicked. See each courier's terms and privacy policy.
15 β€” FAQ

Frequently Asked Questions

Does it need the WhatsApp Business API?
No. Traceify uses the free wa.me deep link. You tap Send in your own WhatsApp, so there is no API key, approval or cost.
Is it HPOS compatible?
Yes. Traceify reads orders through WooCommerce CRUD and declares compatibility with High-Performance Order Storage and Cart/Checkout Blocks.
Can I use the shortcode on another page?
Yes. Add [traceify_tracker] to any page, then select that page under Tracking Page in the settings so emails and messages link to it.
Will emails duplicate WooCommerce's emails?
No. Only Shipped is on by default. Enable the others only if you prefer Traceify's template over WooCommerce's.
How is the delivery date calculated?
Order date plus processing days plus your minimum and maximum shipping days. Weekends are skipped when the option is enabled.
Can I turn off the Track Order button?
Yes. Go to Traceify β†’ General β†’ Track Order Button and switch off the email button, the My Account button, or both.
Does the Track Order link expose the billing email?
No. The link uses the order ID and WooCommerce's order key. The billing email is never placed in a URL.
Can I add a courier that is not in the list?
Yes. Go to Traceify β†’ Shipment Tracking β†’ Custom Courier and enter a name and a tracking URL containing {tracking_number}. Developers can also use the trcfy_couriers filter.
Where does the Shipped status come from?
WooCommerce has none, so Traceify registers wc-shipped unless another plugin already has.
Is customer data safe?
Lookups need the order number and matching billing email. Inputs are sanitized, output is escaped, and settings and order actions require the manage_woocommerce capability and a valid nonce.
What happens when I delete the plugin?
All Traceify options and the auto-created tracking page are removed. Order meta (delivery dates, courier and tracking number) stays on your orders.
Is it translation ready?
Yes. Strings use the text domain traceify-for-woocommerce.
16 β€” Changelog

Changelog

v1.0.2One-click trackingFeature update
  • Track Your Order button β€” added to WooCommerce Processing, On hold and Completed emails (HTML and plain text)
  • My Account β€” "Track" button next to each order
  • Secure links β€” order ID plus order key; the billing email never appears in a URL
  • Privacy β€” strict Referrer-Policy on tracking links; result pages are excluded from page caches
  • Developer β€” new trcfy_track_button_email_ids filter
  • Settings β€” toggles under Traceify β†’ General β†’ Track Order Button
v1.0.1Shipment trackingFeature update
  • Shipment tracking β€” courier and tracking number per order, with a "Track shipment" link
  • Built-in couriers β€” DHL, FedEx, UPS, USPS, Steadfast, plus a custom courier
  • Everywhere it matters β€” tracking page, branded emails and WhatsApp placeholders {tracking_number} {tracking_link} {courier_name}
  • Auto-mark as Shipped β€” optional, when a tracking number is first added
  • Shipped status β€” registered automatically unless another plugin provides it
  • Developer β€” new trcfy_couriers filter
  • Compliance β€” text domain matches the plugin slug, External Services documented, no jQuery, index.php files added
v1.0.0September 5, 2026Initial Release
  • Branded tracking page β€” visual timeline, order summary and customer notes
  • WhatsApp updates β€” orders list column, order meta box and per-status templates
  • Estimated delivery β€” auto-calculated with business-day support
  • Email notifications β€” branded HTML emails with per-status toggles and subjects
  • HPOS and Blocks compatible
  • Clean uninstall β€” removes options and the tracking page