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.
Requirements
| Requirement | Minimum | Tested up to |
|---|---|---|
| WordPress | 6.0 | 7.1 |
| WooCommerce | 7.0 | 9.9 |
| PHP | 7.4 | β |
Requires Plugins header; on older versions Traceify refuses to activate and shows an error.Installation
traceify-for-woocommerce.zip and click Install Now.[traceify_tracker] shortcode and saves default settings.8801712345678), then save.File Structure
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 status | Timeline step |
|---|---|
pending Β· on-hold | 1 β Order Placed |
processing | 2 β Processing |
shipped | 3 β Shipped |
completed | 4 β Delivered |
cancelled Β· refunded Β· failed | Single special step |
shipped status, so Traceify registers wc-shipped for you. If another plugin has already registered that slug, Traceify steps aside and uses it.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 withhttp://orhttps://. 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.
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.
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
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
| Placeholder | Replaced 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) |
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:
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.
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.
| Status | Default | Reason |
|---|---|---|
| Shipped | on | WooCommerce has no default email for it |
| Processing Β· Completed Β· On Hold Β· Cancelled | off | WooCommerce already sends these |
Subjects accept the same placeholders as WhatsApp messages. Leave a subject blank to use the built-in default.
Shortcode
Place the tracking form on any page or post. It takes no attributes.
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]' );.
All Settings
Each setting is a separate WordPress option prefixed trcfy_. Read one with get_option( 'trcfy_edd_processing_days', 1 ).
| Option | Default | Description |
|---|---|---|
| trcfy_brand_color | #7C3AED | Brand color for the page and emails |
| trcfy_store_name | site name | Name shown in messages and emails |
| trcfy_brand_logo_url | "" | Logo for the tracking page and emails |
| trcfy_tracking_page_id | auto | Page holding the shortcode |
| trcfy_wa_number | "" | Your WhatsApp number, digits only with country code |
| trcfy_wa_show_customer_btn | yes | Show the chat button on the tracking page |
| trcfy_wa_customer_btn_label | Chat with us on WhatsApp | Button label |
| trcfy_wa_msg_{status} | preset | Template per status: pending processing on-hold shipped completed cancelled |
| trcfy_edd_enabled | yes | Enable delivery estimates |
| trcfy_edd_processing_days | 1 | Preparation days (0β30) |
| trcfy_edd_min_ship_days | 2 | Minimum transit days (1β60) |
| trcfy_edd_max_ship_days | 5 | Maximum transit days (1β60) |
| trcfy_edd_exclude_weekends | yes | Skip Saturday and Sunday |
| trcfy_track_btn_email | yes | Add the Track Your Order button to WooCommerce customer emails |
| trcfy_track_btn_account | yes | Add a Track button to My Account β Orders |
| trcfy_shipment_enabled | yes | Enable shipment tracking (meta box, tracking page, emails, WhatsApp) |
| trcfy_shipment_auto_shipped | no | Mark 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_enabled | yes | Master email toggle |
| trcfy_email_enabled_{status} | shipped: yes | Per-status toggle for processing on-hold shipped completed cancelled |
| trcfy_email_subject_{status} | "" | Custom subject; blank uses the default |
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.
WordPress & WooCommerce hooks Traceify uses
| Hook | Used for |
|---|---|
| woocommerce_order_status_processing | Calculate and store the delivery estimate |
| woocommerce_checkout_order_created | Estimate for orders created already in Processing |
| woocommerce_order_status_{status} | Send branded emails (priority 20) |
| before_woocommerce_init | Declare HPOS and Cart/Checkout Blocks compatibility |
| init | Register the wc-shipped order status (priority 20) |
| woocommerce_email_after_order_table | Add the Track Your Order button to customer emails (priority 20) |
| woocommerce_my_account_my_orders_actions | Add the Track button to My Account β Orders |
| send_headers | Send Referrer-Policy: same-origin on order-key links |
| wc_order_statuses | Add Shipped after Processing in the status list |
| woocommerce_process_shop_order_meta | Save courier + tracking number (priority 30), then optional auto-Shipped (priority 60) |
Order meta
| Meta key | Value |
|---|---|
| _trcfy_edd_min | Earliest delivery date, Y-m-d |
| _trcfy_edd_max | Latest delivery date, Y-m-d |
| _trcfy_courier | Courier key, e.g. dhl or custom |
| _trcfy_tracking_number | Tracking number (max 100 characters) |
DONOTCACHEPAGE on result pages, which most caching plugins respect. If yours does not, exclude URLs containing trcfy_ from the cache.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.
| Service | Used for | What is sent, and when |
|---|---|---|
WhatsApp (wa.me) | Customer chat button and one-click admin status update | The 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. |
Frequently Asked Questions
Does it need the WhatsApp Business API?
wa.me deep link. You tap Send in your own WhatsApp, so there is no API key, approval or cost.Is it HPOS compatible?
Can I use the shortcode on another page?
[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?
How is the delivery date calculated?
Can I turn off the Track Order button?
Does the Track Order link expose the billing email?
Can I add a courier that is not in the list?
{tracking_number}. Developers can also use the trcfy_couriers filter.Where does the Shipped status come from?
wc-shipped unless another plugin already has.Is customer data safe?
manage_woocommerce capability and a valid nonce.What happens when I delete the plugin?
Is it translation ready?
traceify-for-woocommerce.Changelog
- 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_idsfilter - Settings β toggles under Traceify β General β Track Order Button
- 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_couriersfilter - Compliance β text domain matches the plugin slug, External Services documented, no jQuery,
index.phpfiles added
- 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