Fixed: The automatic courier shipping charge no longer replaces the store’s shipping method with a custom one — it now adjusts the existing shipping rate’s cost and label in place. This fixes Cash on Delivery disappearing from the payment options (and orders being saved with the flat rate) on stores where COD is restricted to specific shipping methods, and fixes the checkout appearing stuck when changing the destination city.
1.0.61
Internal: Removed the plugin’s hardcoded courier reference for the checkout shipping-charge estimate — the TrackKaro server already resolves which courier’s estimate to use per store, so the plugin no longer needs to know or send it. No visible change in behavior.
1.0.60
Changed: The checkout shipping line for the automatic courier charge is now labeled “Shipping Charges” (previously “Estimated Courier Charge (Beta)”).
Added: New “Apply Shipping Charges To” setting — choose which enabled payment methods the automatic courier-based shipping charge applies to (e.g. Cash on Delivery plus Direct Bank Transfer). Defaults to Cash on Delivery only, so existing setups are unchanged.
1.0.59
Added: Optional “Free Shipping Over (Order Value)” setting — when the order value (excluding shipping) meets or exceeds the amount you set, the courier charge is waived and shipping shows as free on Cash on Delivery orders. Leave blank to disable.
Note: Requires the TrackKaro server-side courier-tariff fix to be deployed for the estimate amount to appear.
1.0.58
Changed: The COD courier-charge estimate (Beta) now REPLACES the store’s normal shipping charge instead of being added on top of it. When Cash on Delivery is selected and a destination city is chosen, the courier estimate becomes the shipping cost (shown as a single shipping line); the store’s flat rate / free shipping still apply normally for all other orders.
1.0.57
Fixed: On Cash on Delivery, the Town/City field disappeared with no city dropdown in its place (the dropdown only appeared after enabling “Ship to a different address”). The city dropdown now correctly replaces whichever address’s city field is active — billing by default, or shipping when shipping to a different address.
1.0.56
Fixed: The checkout COD courier-charge estimate (Beta) never appeared even when fully enabled and configured — the plugin read the server config from the wrong response level, so the Leopards city dropdown and estimate line stayed hidden. The dropdown now shows correctly on Cash on Delivery selection.
1.0.55
Added: Optional (Beta) estimated courier charge at checkout for Cash on Delivery orders. When enabled in Settings and configured per-courier in your TrackKaro panel, customers choosing COD see a Leopards city dropdown and a live shipping charge estimate before placing their order. Off by default. The checkout dropdown only appears once the feature is fully confirmed active on the TrackKaro server — stores mid-setup (Settings box checked but panel not yet configured) see the normal WooCommerce checkout with no change.
1.0.54
Added: You can now create Sonic/Trax COD bookings directly from the WooCommerce order screen, just like PostEx and Leopards — select destination city and pickup address, and the shipment is booked with Trax automatically.
1.0.53
Added: Sonic/Trax orders can now download Airway Bill and Load Sheet PDFs from the order screen, matching PostEx and Leopards.
1.0.52
Improved: Free-trial billing notices now say “trial” explicitly — you get a clear heads-up as your trial nears its day limit or tracking quota, and a prompt to pick a plan when it ends (shipments pause until you do).
1.0.51
Improved: Billing notices now match your plan type. Monthly (postpaid) plans no longer see “recharge” or “plan expires” prompts — instead you get a clear, informational heads-up when you go past your included trackings into overage (nothing is ever paused on a monthly plan).
1.0.50
Added: “Cancel / Return” button on the order screen — ask the courier to cancel a booking (or arrange a return) right from WooCommerce. If the parcel is already in transit and the courier declines, you get a clear message to contact them directly. Your tracking quota is not refunded on cancellation.
Improved: Your shop tracking link is now fetched automatically when you connect — you no longer need to type the shop slug by hand. The field is filled for you and the plugin works even before a slug is set.
1.0.49
Added: Optional “Alert on First Failed Delivery” — when enabled, the store owner gets a single email the first time an order’s delivery attempt fails (couriers may retry many times, but you are notified only once per order). Off by default.
Changed: COD booking is now always available on the order screen — the separate “Enable creating COD bookings” toggle has been removed.
1.0.48
Fixed: Plugin updates now come exclusively through WordPress.org. Removed the old self-hosted update checker that caused “Update failed: Download failed. Unauthorized.” and a “View changelog” link to the wrong URL.
Fixed: The “View version details” popup now shows the full WordPress.org description and changelog instead of a blank/short summary.
1.0.47
Added: A “Billing & Account” panel on the plugin settings page showing your current plan, credits remaining, usage, and days left — read from the already-cached billing status, with no extra API calls.
Tweaked plugin description wording.
1.0.46
Fixed: Dashboard tracking summary widget no longer counts cancelled or refunded orders as “Active” — a cancelled WooCommerce order retaining old tracking meta was inflating the active count by 1.
1.0.45
Added: A “Mark as Dispatched” checkbox on the Generate Courier Order (COD) form — when ticked, the order moves to “Dispatched” the moment the courier booking is created and the customer is notified. The choice is remembered per-admin (sticky): your last selection becomes the default on the next order, so you set it once.
Changed: The previous behind-the-scenes “Mark as Dispatched on COD Order Creation” option was replaced by this per-order checkbox, giving you control on each booking instead of one global toggle. The box is ticked by default (matching the manual tracking entry); untick it on any order and that preference is remembered for next time.
1.0.44
Compliance: Every register_setting() now passes a literal, type-specific sanitize_callback (no callback held in a variable), and the Sync Interval select uses a dedicated method that allowlists its four known values — so each field’s sanitizer is statically verifiable.
Fixed: Dashboard widget “Open TrackKaro Panel” link now correctly points to trackkaro.pk/panel (was /panel/dashboard which gave a 404).
Fixed: Dashboard widget active-shipment count now uses a positive IN list of known in-progress statuses so orders submitted but never synced (empty status) are no longer counted as active.
Fixed: Dashboard widget transient is now cleared on plugin upgrade and after each status sync so stale counts are not shown after updating.
Added: “Remove all data on uninstall” setting (Settings → Features). Off by default — opt-in to permanently delete all tracking meta from orders on uninstall.
Server: When a courier API definitively reports a tracking number not found, the error message is now preserved and shown in the admin viewer instead of being overwritten by the generic “No tracking method available” message.
1.0.43
Compliance: register_setting() now uses a direct, type-specific sanitize_callback for every field (sanitize_text_field, sanitize_email, sanitize_checkbox, sanitize_select) instead of a shared dispatcher, so the correct sanitizer per field is statically verifiable. The remaining inline-closure callback on the debug-mode option was also replaced with a named method.
Fixed: Removed a duplicate plugin header file that caused two plugins of the same name to register on install. The plugin now ships a single main file (dango-trackkar.php) under the dango-trackkar slug.
1.0.42
Rebranded: Domain changed to trackkaro.pk and product name updated to TrackKaro throughout plugin UI, settings, links, and external service references.
1.0.41
Improved: Beta couriers now show a dimmed “beta” tag next to their name in the admin couriers list.
Improved: “Custom / Other Courier” now shows a “Manual tracking only” note in the order metabox when selected — makes clear no live status updates will occur.
1.0.40
Fixed: “Open TrackKaro Panel” link in the WP dashboard widget now correctly points to trackkaro.pk/panel/dashboard (was referencing a removed option and resolving to an invalid URL).
1.0.39
Compliance: Replaced the two remaining inline <script> blocks (proactive quota notice + trust badge dialog) with properly enqueued scripts via wp_add_inline_script(); the trust badge dialog now enqueues jQuery UI dialog through the WordPress script API.
Compliance: register_setting() now uses a named sanitize callback (sanitize_setting) so the sanitizer is statically recognizable; per-field type-specific sanitization is preserved.
Compliance: Hardened input handling — AJAX tracking/courier fields now pass through WP core sanitizers (sanitize_text_field / sanitize_key) before custom sanitizers, and bulk-action notice GET reads are unslashed before sanitizing.
Fixed: The first-run trust badge dialog now updates the Features checkbox on the settings page immediately after you choose, so the saved value is reflected without a refresh and cannot be accidentally reverted by a subsequent Save.
1.0.38
Improved: TrackKaro metabox action buttons redesigned as equal-weight compact pills matching the height of the status badge. Labels shortened to Refresh / ePOD / Restart.
1.0.37
Improved: TrackKaro metabox action buttons redesigned — “Refresh Status” is now a full-width primary button; “Get ePOD” and “Reactivate” appear as a compact secondary row below it.
1.0.36
Fixed: “View details on TrackKaro” button in customer tracking shortcode is now centred in the card footer.
Fixed: Trust Badge setting checkbox now appears in the Features section of the plugin settings page with the correct checked/unchecked state.
Fixed: Green “TrackKaro is connected and active” banner on settings page is now a compact single-line strip instead of a full-height box.
1.0.35
Changed: Customer tracking shortcode footer button now links to “View details on TrackKaro” for all couriers instead of “View on [Courier] website”. The tracking number in the status header still links directly to the courier’s portal. Applies to PostEx, TCS, Leopards, CallCourier, Sonic, Daewoo, and all future couriers.
1.0.34
Added: First-run opt-in dialog on the TrackKaro Settings page asks whether to display the “Tracking by TrackKaro Pakistan” trust badge on the customer tracking page (recommended for customer confidence). One-time prompt; choice saved immediately. Addresses WordPress.org attribution guideline.
Changed: “Trust Badge” replaces the old “Powered by” wording — the badge now reads “Tracking by TrackKaro Pakistan” and is disabled by default. Enable under TrackKaro Settings → Feature Settings.
Changed: Code comment in tracking submission updated to clearly describe serviceware architecture — only the comment changed, tracking submission behaviour is unchanged (server confirmation is still required before order meta is written). Addresses WordPress.org Guideline §6 (Serviceware) language concern.
Improved: Settings fields now use type-specific sanitization callbacks — checkboxes validate yes/no, selects validate against the allowed option list, text fields use sanitize_text_field(). Addresses WordPress.org Plugin Check sanitization requirement.
1.0.33
Fixed: Test Connection now works after v1.0.32 removed the Server URL field — PHP falls back to the hardcoded endpoint instead of returning “Server URL is required”.
Fixed: Quota warning notice no longer shows “Critical — plan expires in 0 day(s)” for free-plan stores; expiry-based alerts are skipped for free plan types.
Fixed: Billing URL in quota notice was built from a removed WP option — now uses the correct hardcoded TrackKaro URL.
Improved: Quota API responses are now logged (WP debug log) so unexpected data is visible without needing server log access.
1.0.32
Fixed: JS global variables renamed to dangoTrackkarAdmin / dangoTrackkarFrontend to satisfy WordPress.org unique-prefix requirement.
Fixed: All echoed variables now use proper WP escaping functions (esc_html()).
Fixed: Sanitization chain updated to use WordPress built-in functions (sanitize_key(), sanitize_text_field()) before custom sanitizers, satisfying Plugin Check.
Fixed: Settings hint URL updated to the official service domain.
Added: Governing Law section to Terms of Service; Cookies and Session section to Privacy Policy.
1.0.31
Fixed: Fatal error “Cannot use object of type WP_Error as array” on order screens when TrackKaro server returns 401 for courier capabilities fetch. get_courier_capabilities() now guards against WP_Error and falls back to all-enabled (buttons visible) on any server error. Short 5-min retry TTL on failure instead of 24-hr cache.
Fixed: CourierApiController now accepts X-TK-Token header (plugin standard) in addition to the legacy X-Api-Token, so GET /api/v1/couriers returns 200 instead of 401.
Fixed: CourierApiController falls back to base query if migration 051 (enable_airway_bill/enable_load_sheet columns) has not been applied yet.
1.0.30
Added: “Download Load Sheet” button in COD order box for PostEx and Leopards shipments.
Added: Admin per-courier settings to enable/disable Airway Bill and Load Sheet download buttons (TrackKaro server admin panel).
Added: ePOD (electronic proof of delivery / signature) button in order tracking metabox for Leopards delivered shipments. Signature URL cached in order meta after first fetch — subsequent views show a direct link.
Added: Dashboard widget now computes delivery rate and stats locally from WooCommerce order meta — no TrackKaro server call required.
Added: AWB, Load Sheet, and ePOD action buttons in TrackKaro server panel tracking list (/panel/tracking) and admin monitoring view.
Added: generic API GET method (Dango_TrackKar_API::get()) for couriers list and ePOD endpoint calls.
1.0.29
Fixed: Log timestamps now show local (admin-configured) timezone alongside UTC WooCommerce header.
Fixed: COD amount field now correctly sends 0 when intentionally set to zero; previous guard silently substituted order total.
Added: Leopards “View on Leopards” tracking portal link in COD order box.
1.0.28
Internal release.
1.0.27
Internal release.
1.0.26
Fixed: Leopards shipper name/phone/address now correctly attached to bookings. Previously the literal string “self” was sent causing blank shipper fields in the Leopards portal. Now shipment_id is sent when a shipper is selected; when no shipper is selected all shipment fields are omitted so Leopards uses account defaults.
Fixed: Area field no longer auto-loads and disappears on city selection. Area is now fully on-demand — a “Load areas” link appears and the dropdown only loads when clicked.
Area cache extended to 30-day transient (same as cities and shippers).
PHPCS: suppressed direct-DB-query warnings for bulk transient deletion (no WP API alternative).
1.0.25
Fixed: Leopards shippers list was never cached (empty-city cache key was silently skipped). Shippers now cache for 30 days like cities.
Fixed: Shippers dropdown now shows “Use account defaults” when no shippers are returned instead of appearing blank.
Added diagnostic logging for Leopards getAllShippers API call — failures now appear in the tracking log with the raw response.
1.0.24
Leopards Courier: complete booking form — Division, Origin City, Shippers, Area, No of Items, extra phone fields, Return Address.
Leopards Courier: Airway Bill (slip) download added to the order screen after booking.
Cache refresh on plugin update: cities, areas, and shipper caches are cleared automatically on each version upgrade.
Fixed submission error when no shipper is selected (empty shipper fields now correctly default to account settings).
Fixed area dropdown visibility logic; area row now appears only when areas load successfully.
Postal Code field removed from COD booking form.
1.0.23
Leopards Courier: searchable Origin City dropdown (before Shippers), Shippers dropdown (optional), Area dropdown (30-day cache).
Special Instructions pre-filled with “Handle with care” (editable).
Weight field defaults to 450 g for Leopards shipments.
Dimensions field removed; Postal Code field removed.
Shippers default option set to “Use account defaults” — order creation works even without selecting a shipper.
1.0.22
PostEx and Leopards COD booking forms now use separate field sets — PostEx fields are hidden for Leopards orders and vice versa.
Leopards: weight in grams (vs PostEx kg), Division (Express / Logistics), Shipment Type (Overnight / Economy) fields added.
City list for Leopards cached for 30 days (same as PostEx); cache is shared and keyed per courier.
1.0.21
Plugin version option stored on activation for future cache-clear-on-update logic.
1.0.20
Leopards Courier city list now cached for 30 days to reduce API calls.
Airway Bill print button added to order screen for PostEx bookings.
1.0.19
Leopards tracking URL updated to new merchant portal (old URLs returned 404).
Leopards: direct tracking URL with TN now available — no more manual lookup required.
Stability improvements for push/webhook status updates.
1.1.0
Added Daewoo FastEx courier support.
Leopards: real-time Push/webhook support — statuses update instantly, no polling lag.
Trial plan system: new accounts automatically receive a free trial on signup.
Paybost payment gateway (PKR billing) with HMAC-SHA256 signature verification.
Manual-only tracking mode: couriers can be set to manual status updates only.
Improved error messages when courier credentials are missing or invalid.
Log Search: filter audit logs and file logs from the admin panel.