Description
This plugin adds a tracking box to your site. The visitor types a tracking number (or a TEG Load ID) and sees the current status, the last known location and the tracking history.
You use your own account with each carrier. The plugin does not come with any API keys.
Supported services
- TEG (Transport Exchange Group / Courier Exchange): live location and status of a load, by Load ID.
- DHL: Shipment Tracking (Unified) API.
- UPS: Tracking API.
- FedEx: Track API.
- Ship24: one key for many carriers, for example Royal Mail, DPD, Evri, Yodel and Parcelforce.
Main features
- One settings card per carrier, with “Connect & Verify” and “Disconnect”.
- Separate colour, form text, cache time and daily limit for each courier.
- The carrier can be detected from the tracking number, or chosen with a drop-down, or fixed in the shortcode.
- API keys and secrets are stored encrypted and are never sent to the visitor’s browser.
- Results are cached for a few minutes, and you can set a daily limit per carrier, to protect free API plans.
- Per-visitor rate limit on the public lookup.
- A developer filter to add your own carrier.
DHL, UPS, FedEx, Ship24 and TEG are trademarks of their owners. This plugin is not made by, or connected to, any of them.
Shortcodes
[daklo_tracking]– one box. The carrier is detected from the number.[daklo_tracking carrier="select"]– the visitor picks the carrier.[daklo_tracking carrier="dhl"]– one carrier only. Usedhl,ups,fedex,ship24orteg.[daklo_load_tracking]– the TEG Load ID form (same ascarrier="teg").
On the Shortcode tab, choose a courier from the drop-down and its shortcode is shown for you to copy. The “Create a page for me” button makes a draft page with the shortcode in it.
Extra options for all of them: title, intro, button, placeholder, heading, help_title, format_title, format_text and help="no".
External services
This plugin sends data to the services below, only for the carriers you connect yourself. Nothing is sent until you save API details for a carrier. Nothing is sent to the plugin author.
TEG – Transport Exchange Group
Used to read the live location and details of a load. When a visitor looks up a Load ID, the Load ID is sent to the TEG API together with your API key. When you click “Connect & Verify”, your API key is sent to check it.
Privacy policy: https://help.transportexchangegroup.com/hc/en-gb/articles/360018439019-Privacy-Policy
DHL – Shipment Tracking (Unified) API
Used to read the status of a DHL shipment. When a visitor looks up a number, the tracking number is sent to the DHL API (api-eu.dhl.com) together with your API key. “Connect & Verify” sends a sample number and your API key.
Terms of use: https://developer.dhl.com/terms-use
UPS – Tracking API
Used to read the status of a UPS shipment. Your Client ID and Client Secret are sent to UPS (onlinetools.ups.com) to get an access token. The tracking number is then sent to UPS with that token.
Terms and conditions: https://www.ups.com/us/en/support/shipping-support/legal-terms-conditions.page
FedEx – Track API
Used to read the status of a FedEx shipment. Your API Key and Secret Key are sent to FedEx (apis.fedex.com) to get an access token. The tracking number is then sent to FedEx with that token.
Terms of use: https://www.fedex.com/en-us/terms-of-use.html
Privacy policy: https://www.fedex.com/en-us/trust-center/privacy.html
Ship24 – tracking API
Used to read the status of a shipment from many carriers. When a visitor looks up a number, the tracking number is sent to the Ship24 API (api.ship24.com) together with your API key, and Ship24 creates a tracker for that number. “Connect & Verify” sends your API key to list the supported couriers.
Terms: https://www.ship24.com/terms
Google Maps (link only)
When a TEG load has a live position and the “Map link” field is switched on, the result shows a “View on map” link. Nothing is sent to Google unless the visitor clicks this link. The link opens google.com/maps in a new tab with the latitude and longitude of the load.
Terms: https://policies.google.com/terms
Privacy policy: https://policies.google.com/privacy
Plugin author (feedback and support e-mail, only when you press Submit)
When you deactivate the plugin you can choose to send a short feedback. On the “Support” tab you can send a feature request, a problem report or a question. This is said next to the Send button. Only when you press “Submit & Deactivate” or “Send message”, your answer, the text you typed, the e-mail address you typed (optional on the pop-up) and basic site info (site URL, plugin version, WordPress and PHP version, locale and the list of connected couriers) are sent by e-mail (through your site’s wp_mail) to the plugin author. “Skip & Deactivate” sends nothing. API keys and tracking numbers are never included.
The visitor’s IP address is not sent to any of these services. It is only used on your own server, in a hashed form, for the rate limit.
Privacy
The plugin does not set cookies and does not store visitor data. For the rate limit it keeps a short-lived counter per visitor, stored as a hash of the IP address. The tracking numbers that visitors type are sent to the carrier as described in “External services”. Results of parcel lookups can be cached on your site for the time you set.
Screenshots







Installation
- Upload the
daklo-courier-trackingfolder to/wp-content/plugins/, or install the zip from Plugins > Add New > Upload Plugin. - Activate the plugin.
- Go to Daklo Tracking (left menu). Use the tabs: Trackings, Courier, Test, Fields, Shortcode, Form text, Theme, Limits and Support.
- On the Courier tab, click a courier. Its card opens below: enter the API details and click “Connect & Verify”. The status must change to “Active”.
- On the other tabs, choose the courier at the top and change its settings. Back and Next take you through the tabs.
- Add one of the shortcodes to a page, or press “Create a page for me” on the Shortcode tab.
FAQ
-
How do I set up a second courier?
-
Open the Trackings tab and click “Add New Tracking”, pick the next courier and repeat the steps. Each courier keeps its own settings.
-
Where do I get the API details?
-
- TEG: from TEG partner onboarding (there is no self-service key). Raise a ticket at https://help.transportexchangegroup.com/hc/en-gb , sign the NDA and API licence, test with a staging key, then ask for a production key.
- DHL: create a free account and an app at https://developer.dhl.com and add “Shipment Tracking – Unified”. Copy the API key.
- UPS: create an app at https://developer.ups.com and add the Tracking product. Copy the Client ID and Client Secret. A UPS account is needed.
- FedEx: create a project with the Track API at https://developer.fedex.com. Copy the API Key and Secret Key.
- Ship24: get an API key from your account at https://www.ship24.com.
Limits and endpoints are set by each carrier and can change. Please read their documentation.
-
How does the carrier detection work?
-
The plugin looks at the format of the number (UPS starts with 1Z, FedEx has 12, 15, 20 or 22 digits, DHL has 10 digits, a TEG Load ID has 5 to 9 digits). It tries the matching connected carrier first. If that carrier does not know the number, or no carrier matches, Ship24 is tried when it is connected. At most two carriers are asked for one lookup.
-
A number is shown as “not found” but it is correct.
-
Parcels can take some hours to appear after the label is made. Try again later. With Ship24, a new number is registered on the first lookup and may show no events yet.
-
How do I save my free API quota?
-
Use “Cache parcel results” and “Daily limit per carrier” on the Limits tab of Daklo Tracking (left menu). They are saved separately for each courier. The same number is then not sent again for a few minutes, and your site stops calling a carrier after the daily limit.
-
My site is behind Cloudflare or a proxy.
-
Add this line to wp-config.php so the rate limit uses the real visitor IP:
define( 'DAKLO_TRUST_PROXY_HEADERS', true ); -
Can I ask for a confirmation before this plugin is deactivated or deleted?
-
Yes. Add
define( 'DAKLO_LOCK_WARNING', true );to wp-config.php. The Plugins screen then asks for confirmation before deactivate or delete. -
How do I add another carrier?
-
Extend the
DAKLO_Providerclass (seeincludes/providers/class-daklo-provider-dhl.php) and add it with thedaklo_providersfilter:add_filter( 'daklo_providers', function ( $providers ) { $providers[] = new My_Carrier_Provider(); return $providers; } );The carrier then gets its own settings card and works in the shortcodes. If you do not want to write code, connect Ship24: one key tracks 1,500+ carriers (Royal Mail, DPD, Evri, USPS and more).
-
By default it sits just below Comments. To move it, add this to your theme’s functions.php or a code snippet plugin (58 puts it just above Appearance):
add_filter( 'daklo_menu_position', function () { return 58; } ); -
Which filters can I use?
-
daklo_providers,
daklo_api_base_url,daklo_show_full_address,daklo_rate_limit_requests,daklo_rate_limit_window,daklo_rate_limit_failures,daklo_rate_limit_failure_window,daklo_client_ip,daklo_allowed_origin_hostsanddaklo_menu_position.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Daklo Courier & Parcel Tracking” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Daklo Courier & Parcel Tracking” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.1.0
- The admin menu now sits near the top of the WordPress menu (just below Comments).
- The admin screen is now one page with a left sidebar of tabs: Trackings, Courier, Test, Fields, Shortcode, Form text, Theme, Limits and Support. You can open any tab at any time.
- Connecting a courier now happens on the Courier tab: click a courier and its API card opens below the tiles.
- The settings tabs have a courier picker at the top. Couriers that are not connected are shown as “Not connected” and cannot be picked. Without a connected courier the tab asks you to connect one first.
- Back and Next buttons on every tab.
- New “Tracking pages” list on the Shortcode tab: every page that holds a tracking form, with View, Edit and Delete (moves the page to the Trash).
- Live preview on the Form text and Theme tabs, shown smaller so the whole form fits on screen.
- Smaller courier tiles, compact fields, softer corners. The content column scrolls next to the side menu.
- A completed or cancelled TEG load now shows its load status (“Completed”) instead of the booking status.
- Admin CSS and JavaScript files carry their change time in the version, so browsers load the new files after an update.
- New “Support” tab: send a feature request, a problem report or a question to the plugin author by e-mail.
- New short feedback pop-up when the plugin is deactivated (optional, with a Skip button).
- The admin screens are narrower and easier to read.
- Courier logos can now be placed as files in the plugin folder (assets/img/couriers/{courier-id}.svg, .png or .webp). Without a file a coloured text badge is shown, and logos chosen in 1.0.0 keep working. The logo picker was removed from the courier setup card.
- All texts of the public tracking result can now be translated (JavaScript translations through wp-i18n). Dates follow the language of the site.
- Accessibility: the tracking form fields now have linked labels, and the loading message is announced to screen readers.
- Security: raw error text from the TEG API is no longer shown to visitors (only written to the debug log).
- Readme: Google Maps link added to “External services”, shortcode options and menu position corrected.
1.0.0
- First release.
- Full-width layout: every step sits in one big card on a soft background; Back / Next / Save & finish are in a bar under the card.
- Fields step saves automatically when you press Next or Back (no separate Save button).
- “Save & finish” moved to the bottom bar. Actions column in the list is centred.
- Every text of the public form can be edited in the admin: search heading, placeholder, button, Need Help heading and format text.
- Courier logos: choose a logo image from the media library for each courier. It shows on the tiles, in the list, in the setup card and on the tracking result.
- TEG load tracking by Load ID, plus DHL, UPS, FedEx and Ship24 parcel tracking.
- Step-by-step setup: choose a courier, connect, test, choose the fields visitors see, then finish.
- Each courier has its own look (theme colour), result cache and daily limit.
- The first screen lists every tracking you set up: courier, type (search load / search parcel), shortcode with a Copy button, created date, status, and Edit / Create page / Delete.
- “Add New Tracking” starts the step-by-step setup. After “Save & finish” you are back on the list, ready for the next courier.
- The last step shows only the form of the courier you are setting up, with its shortcode.
- Live preview of the public form while you change colour and texts.
- “Create a page for me” makes a draft page that already holds the shortcode.
- Each courier can have its own title, intro text and button text.
- The finish step has a drop-down: pick a courier and only its shortcode is shown.
- Shortcodes:
[daklo_tracking],[daklo_tracking carrier="select"],[daklo_tracking carrier="dhl"]and[daklo_load_tracking]. - API keys are stored encrypted and never sent to the visitor’s browser.
- Per-visitor rate limit on the public lookup.