CodeCanyon WooCommerce AfterShip - WordPress Plugin
The plugin streamlines order tracking for WooCommerce, enhancing user experience with its efficient functionalities. With a seamless integration process, it allows for easy monitoring and management of shipments directly from the WooCommerce platform. Automating tracking updates for customers orders, it ensures real-time delivery status notifications, fostering transparency and customer satisfaction throughout the shipping process.

Plugin Features
Streamlining the post-purchase experience, it minimizes customer inquiries by offering a self-service tracking option within the WooCommerce store. This empowers customers to effortlessly track their orders without needing to reach out to support teams, reducing workload and enhancing operational efficiency. Its intuitive design and user-friendly interface make it a valuable addition for store owners looking to provide a seamless order tracking experience for their clientele.
Enhancing order transparency, CodeCanyon WooCommerce AfterShip supports a wide range of global carriers, ensuring comprehensive tracking information for shipments worldwide. By centralizing tracking data in one accessible location, it simplifies the tracking process for both customers and store administrators. This comprehensive tracking system minimizes errors, streamlines logistics, and optimizes the overall shipping and delivery process.
Furthermore, it offers customizable tracking pages, allowing store owners to maintain brand consistency and provide customers with a personalized tracking experience. By incorporating branded tracking pages, businesses can reinforce their brand identity throughout the order fulfillment journey. This feature adds a professional touch to the post-purchase experience, strengthening brand loyalty and trust among customers.
By automating tracking notifications, it reduces manual tasks for store owners, saving time and effort typically spent on order updates. The plugins automated shipment tracking enhances operational efficiency and ensures timely communication with customers regarding their orders. This real-time tracking capability fosters trust and reliability, contributing to a positive customer experience and increased satisfaction levels.
In conclusion, the plugin revolutionizes order tracking for WooCommerce by offering a sophisticated yet user-friendly solution to streamline shipment monitoring and enhance customer satisfaction. Its robust features, seamless integration, and customizable tracking options make it a valuable tool for e-commerce businesses seeking to optimize their post-purchase processes and elevate the overall shopping experience for their customers.
Guide to Setting Up CodeCanyon WooCommerce AfterShip for WooCommerce Order Tracking
CodeCanyon WooCommerce AfterShip is not meant for shipping rate calculations or label printing. Its purpose is clear post-purchase communication: the store receives a tracking number, links it to a WooCommerce order, sends the data to AfterShip, and shows the customer the delivery progress as a timeline. In this guide, we will walk through how to prepare your store, where to enter the AfterShip key, how to choose carriers, how to add tracking numbers to an order, how to use the shortcode for guest customers, how to verify WooCommerce emails, and what to do if the status does not update.
This guide does not repeat the product listing. What matters here is the practical implementation workflow: what should already be configured in WooCommerce, which data you cannot skip, where teams most often confuse order status with shipment status, why the AfterShip API may not return the expected result right away, and how to safely test the full chain on a test order.
The plugin depends on the external AfterShip service, so the quality of the outcome does not depend on WordPress alone. The chain includes WooCommerce, order settings, the tracking number, the selected carrier, the API key, service limits, the carrier's own data, and the email the customer receives after the order status changes. If even one part of that chain is configured incorrectly, the storefront may show an empty timeline even though the plugin itself is installed correctly.
What Problem This Plugin Solves in a WooCommerce Store
Out of the box, WooCommerce can move an order through statuses, send customer emails, and store order notes. But by itself, it does not turn a tracking number into a live delivery history. A customer can see that an order is completed or processing, but may still have no idea where the package is, why it is delayed, whether a delivery attempt was made, or when it needs to be picked up. CodeCanyon WooCommerce AfterShip fills exactly that gap between the warehouse and the customer.
The purpose of the plugin is to connect a WooCommerce order to AfterShip Tracking. The administrator adds a tracking number and shipping company to the order, and the plugin displays the delivery status on the order details page in the customer's account. The CodeCanyon listing also states that tracking numbers can be added, edited, and deleted directly from the orders list page, not only from the individual order screen. That is useful for stores where a manager handles many shipments every day and does not want to reopen each order one by one.
AfterShip, on its side, standardizes statuses from different carriers. The service documentation lists key states such as InfoReceived, InTransit, OutForDelivery, AttemptFail, Delivered, AvailableForPickup, Exception, Expired, and Pending. That is convenient for the store: even if carriers describe statuses differently, the customer can still see a more consistent and understandable journey.
It is important not to confuse this with a full logistics platform. CodeCanyon WooCommerce AfterShip does not replace the carrier, print labels, calculate rates at checkout, or create a shipment with the carrier. Its job begins after the order has already been placed, the shipment has already been created in your logistics system or with the carrier, and the manager already has a tracking number.
Where the Plugin Is Especially Useful
The most obvious use case is a store that ships with multiple carriers and wants to give customers a single tracking interface. Without that layer, a manager usually pastes a carrier website link into an order note or email. That works, but the customer is sent to an external website, sees a different interface, and often comes back to support asking what a particular status actually means.
The second use case is guest checkout. Even if the customer does not log in to an account, you can still provide a separate page with the [wcafw_order_status] shortcode. According to the author's description, the form asks for the order identifier and loads the delivery timelines. That works well for a "Track Your Order" page that you can add to the menu or include in an email.
The third use case is bulk shipment updates. The product page mentions CSV import: the manager prepares a file with tracking data, imports it through a dedicated section, and the plugin adds the data to the orders. This is especially useful when tracking numbers come from an external warehouse, marketplace fulfillment service, or a spreadsheet from the carrier.
Who CodeCanyon WooCommerce AfterShip Is For, and When You Should Choose a Different Approach
The plugin is a good fit for a store that already runs on WooCommerce, ships physical products, and wants to show customers delivery progress without building a custom tracking portal. It is especially appropriate if the company already uses AfterShip or if the team is ready to connect an AfterShip plan that supports the required tracking API features.
According to the CodeCanyon listing, the plugin requires at least a paid AfterShip plan at a level sufficient for the integration to work. The author also states separately that they are not affiliated with AfterShip and that subscription questions must be handled with AfterShip directly. So before installation, you need to evaluate not only the cost of the add-on itself, but also the external dependency: the AfterShip account, usage limits, availability of the required carriers, regional support, and personal data handling requirements.
The plugin is not the best choice if the store only wants to insert one simple carrier link into a completed order email. In that case, a lighter tracking extension or even a manual order note may be enough. It also does not solve label purchasing, rate comparison, or label printing. If you need one unified tool to "create shipment - buy label - get tracking - notify customer," look instead at shipping platforms or official carrier integrations.
The main selection criterion is simple: if you need a delivery timeline through AfterShip and a link between tracking data and the WooCommerce order, this product fits the job; if you need shipping calculations or warehouse management, you are looking at a different category of solution.
Limitations You Should Accept Up Front
The first limitation is the source of the statuses. AfterShip receives events from the carrier. If the carrier has not yet accepted the package, has not updated its server, or the tracking number was entered incorrectly, the timeline will not become detailed immediately. A Pending status does not automatically mean something is broken; it may simply mean that the shipment was just added or that no data is available yet.
The second limitation is carrier selection accuracy. AfterShip can detect the carrier, but the documentation recommends sending the exact slug or at least the slug_group when that information is known. In the CodeCanyon WooCommerce AfterShip interface, the administrator selects the shipping companies used by the store. The more accurate that list is, the lower the risk that a tracking number format shared by multiple services will be matched to the wrong one.
The third limitation is that WooCommerce order status and delivery status are not the same thing. An order may be Completed because the store has finished its part of the process, while the package is still in transit. Or the reverse: the delivery may be complete, while the order status inside WooCommerce changes only according to the store's own rules. Do not build your business process as if those two statuses should always match automatically.
What to Check Before Installation
Before installing the plugin, it is worth doing a quick technical audit. It takes less time than debugging empty timelines and unsent emails later. Start not with WordPress, but with the order handling process: who receives the tracking number, where it is stored before being entered into WooCommerce, at what point the order is moved to Completed, and who is responsible for correcting a bad tracking number.
Minimum Requirements for Normal Operation
- WooCommerce is installed and working on the site, and your staff has access to the orders section.
- Orders for physical products move through a clear status flow: payment, processing, shipping, completion.
- The store has an AfterShip account with access to the tracking API and an appropriate pricing tier.
- You know the main carriers the store uses, and you can select the corresponding companies in the plugin settings.
- WooCommerce email is configured and verified with a test order, because tracking data may be inserted into notifications.
- The team understands which data can be sent to an external service and which data should not be included in additional fields.
After that, check compatibility with WooCommerce's modern order storage structure. The CodeCanyon changelog mentions improved HPOS compatibility. That is a good sign, but on a real site you still need to test the workflow on a staging copy or at least on a non-public order. HPOS changes how orders are stored: the data moves into separate WooCommerce tables, and extensions must use the order APIs correctly rather than assuming the old wp_posts and wp_postmeta structure.
A practical pre-launch check: create one test order, enable the WooCommerce order storage mode you need, add a tracking number, update the order status, and verify the customer account, the email, and the shortcode page. Only move the process to real shipments after that full chain works.
Email, Cache, and the Customer Account
The plugin displays data in areas often affected by other extensions: WooCommerce email templates, the order page in the customer account, the orders list in the admin panel, and sometimes the shortcode page. If the site uses an email builder, a customer account customization plugin, page caching for logged-in users, or aggressive JavaScript optimization, test those areas especially carefully.
For most stores, there is no need to disable caching entirely. But the customer account page and the tracking page with the shortcode usually should not be cached as a static page for all visitors. On those pages, the result depends on the user, the order number, or the state of a specific shipment. If the cache serves an old timeline, the customer will assume the delivery is not moving.
Installation and Initial Verification Without Risking Real Orders
The installation itself is similar to any standard paid WordPress plugin: upload the ZIP file through the Plugins section, activate it, then go to the WooCommerce AfterShip menu. But for a product like this, activation is not the main checkpoint. What matters is the first verification afterward. The plugin works with orders and emails, so you should not connect it to live shipment flow immediately.
A Safe Startup Sequence
- Create a backup of the site, or confirm that your host already has a recent backup.
- Install the plugin from the ZIP archive through
Pluginsand activate it. - Open the WooCommerce AfterShip menu and find the field for the AfterShip API key.
- Paste in the API key from your AfterShip account. Do not include this key in content generation tasks, vendor emails, or public notes.
- Select the shipping companies the store actually uses.
- Create or choose a test order for a physical product.
- Add the tracking number and carrier on the order screen or through the orders list if quick entry is available in your version.
- Open the order page as the customer and check whether the timeline appears.
If the interface shows an error after you enter the key, or the carrier list does not load, do not start by reinstalling WordPress. First check the AfterShip key itself, your plan availability, hosting restrictions on outbound HTTPS requests, errors in the WooCommerce logs, and any blocking by security extensions. The AfterShip API requires the as-api-key header for direct requests, and the plugin must use the saved key when connecting to the service.
What Counts as a Successful Initial Test
A successful test is not just "the plugin is activated." At minimum, the result should be visible in three places: the admin area has a block or action for tracking data, the order stores the tracking number and carrier, and on the public side the customer sees delivery tracking in the order or through the shortcode form. If you change the order status to one where the plugin inserts tracking info into the email, verify the WooCommerce email as well.
Do not use a real customer order as your first test. It is better to create an internal order where you know exactly which address and product were used, which tracking number was added, which email should be sent, and what can be deleted after the test.
Settings Map After Installation: Key, Carriers, Emails, and Timeline
The most important part of configuring CodeCanyon WooCommerce AfterShip is not the number of toggles. It is whether the settings match the store's real workflow. The plugin is described as straightforward, but that does not mean you can turn it on and forget about it. You need to define which carriers are used, when the customer should see the tracking number, which notifications should be sent, and how the data should appear on the order page.
AfterShip API Key
The API key connects the site to your AfterShip account. The AfterShip documentation states that the key is created in the organization account and passed in requests through the as-api-key header. In the plugin interface, you do not work with headers manually, but access to the tracking API still depends entirely on a valid key.
For security, store the key only in the site settings and in the team's secret manager. If an employee leaves or the key is accidentally exposed in correspondence, create a new key in AfterShip and replace it in the plugin. Do not paste the API key into arbitrary order notes, theme code, screenshots intended for publication, or CSV files.
Selecting Shipping Companies
The product page describes a step where you select the shipping companies the store will use for tracking. This is not a formality. AfterShip supports a large number of carriers, and in some cases the number format may look similar across multiple services. If the store works with DHL, FedEx, USPS, the local postal service, and a regional courier, it is better to enable only the carriers you actually use and regularly compare the list against your warehouse process.
If the exact courier slug is known in AfterShip, that is the most reliable way to associate a tracking number with a carrier. If the exact slug is not available, AfterShip may try to detect the carrier automatically, but the documentation explicitly says it is helpful to enable frequently used carriers in the preferred courier list. In practical admin terms, that means: do not leave carrier selection to guesswork if your warehouse team already knows exactly which service is being used.
Order Status Used to Insert Tracking Info into Emails
According to the CodeCanyon description, tracking info is automatically inserted into WooCommerce notifications when the order reaches the Completed status, and if necessary you can change the status the plugin uses as the trigger for insertion. This is a subtle setting because stores use statuses differently.
If the store moves an order to Completed as soon as the package is handed off for delivery, inserting the tracking number into the completed email makes sense. If Completed is used only after actual delivery, the customer may receive the tracking details too late. In that case, it is better to check whether your version of the plugin allows you to select a different status for adding the information to the email, and then configure the process so the tracking data reaches the customer at the time of shipment.
Do not change WooCommerce status logic just to fit the plugin. First define what each status actually means in your store, then adjust the notification around that. In WooCommerce, Processing usually means payment has been received and the order is waiting to be fulfilled, while Completed means fulfillment is finished. WooCommerce emails already have their own status-based notifications, so the additional tracking information should support the process, not confuse the customer.
Message Template and Active Notifications
The plugin lets you configure the message included in emails and also send active email notifications with tracking info. If WPML is used, the email template can be localized. That matters for a Russian-language store: do not leave the customer with an awkward mix of Russian text, English descriptions, and unclear statuses if the email can be adapted cleanly.
When configuring the email, keep the text short. The customer needs three things: the shipment number, a clear link or status block, and a short explanation that updates depend on the carrier. Do not promise an exact arrival time unless it is confirmed by the carrier or by AfterShip. It is better to say that the status will update after new data becomes available from the shipping service.
Timeline Position and Behavior
The product changelog mentions timeline interface settings: UI improvements, the option to show the timeline collapsed, event order, and the position of the block on the order page. These settings affect how easy it is for the customer to read the information.
For most stores, it is better to show the newest events above the older ones, because customers usually want the current state first: in transit, available for pickup, delivery attempt made, or delivered. If your audience is used to reading the history from the beginning, you can choose the reverse order, but then make sure to test the order page on a mobile screen and in the email.
CSV Import
CSV import is useful when tracking numbers arrive in batches. The product listing includes a link to a sample file and instructions to use a dedicated import section. Before your first bulk import, run a small batch with two or three test orders. Verify that the order is found, the tracking number is attached to the correct order, the carrier is selected correctly, the email is not resent unnecessarily, and older tracking numbers are not overwritten by mistake.
With CSV import, the most common operational mistake is not the file format but the lack of a rule for handling an existing tracking number. If the order shipped in two packages, the new tracking number should be added as a separate shipment. If the old tracking number was wrong, it should be replaced. Those two scenarios cannot be treated the same way.
Working with Tracking Numbers in the Order Screen and Orders List
In day-to-day work, a manager usually is not thinking about the API. They open the order, see the shipping service, paste in the tracking number, save, and move the order to the appropriate status. That is why implementation quality depends on how clear that internal operating procedure is.
Order Screen
On the WooCommerce order screen, you can see order details, products, addresses, notes, and actions. CodeCanyon WooCommerce AfterShip adds its own area where you can enter tracking info. Start by entering the tracking number without extra spaces. The product changelog specifically mentioned a fix related to spaces before and after the tracking code, but that is not a reason to rely on automatic cleanup. Clean data is easier to troubleshoot.
Then select the carrier. If the shipment is international and multiple services are involved along the way, choose the number and the carrier the customer is actually expected to track. AfterShip may account for last-mile data, but the specific plugin interface and your own process need to be tested against a real shipment type.
Orders List and Quick Actions
The product author states that tracking numbers can be added, edited, and deleted directly from the orders list page. That speeds up processing, but it also increases the risk of mistakes: in a list view, it is easier to confuse neighboring orders, especially when order numbers look similar, customers placed them one after another, and the manager is copying data from a spreadsheet.
For the orders list, it is worth establishing a double-check rule: before saving, verify the order number, the customer name or email, the shipping company, and the last four characters of the tracking number. If the store uses custom order numbers, make sure the plugin and the import feature work with the identifier your team sees in the daily spreadsheet. The product changelog mentions compatibility with Sequential Order Numbers, so this was clearly an important issue for users.
Multiple Shipments in One Order
A WooCommerce order may ship in parts: one product is in stock while another ships later; part of the order comes from a supplier, and part comes from your own warehouse. The product page says the timeline is displayed for each tracking code linked to the order. That makes it possible to show multiple shipments, but only if the manager adds each one correctly.
In that scenario, the product setting that links tracking codes to specific items is especially useful. You should not promise the customer that "the entire order has been delivered" if only one package has arrived. It is better to use clear shipment names, for example "Main Package" and "Separate Accessory Package." If you need to change the shipment title, use the official plugin filter described by the author rather than editing the plugin files.
What the Customer Sees: Account, Email, and Shortcode
The post-purchase experience needs to be clear not only to the administrator. The customer usually does not know what a courier slug, API key, or status enum is. They want to see whether the package has been accepted, is moving, is out for delivery, is waiting for pickup, or has been delivered. That is why, after setup, you need to verify the public-facing result from the customer's point of view.
Order Details Page
The main display area is the order details page in the WooCommerce customer account. According to the product description, the plugin shows a timeline for each tracking code. Check how it looks in your theme: is the block cut off, is there enough contrast, do the dates and statuses break on mobile, and do the styles conflict with any account customization plugin.
If the timeline is too long, use the collapsed display setting if it is available in your version. The customer should see the current status immediately and the full history only when needed. At the same time, do not hide the status entirely behind a tab that is hard to notice.
WooCommerce Emails
Tracking info can be inserted into WooCommerce notifications. That reduces the number of "where is my order" requests, because the customer receives the data where they already expect communication from the store. But WooCommerce emails are often modified through builders, themes, or child-theme templates. After enabling the plugin, check at least the main emails: completed order, customer note, and whatever status-based notification you actually use for sending tracking details.
You do not need to overload the customer with the full history in the email. The tracking number, the carrier, and a link or short block with the current status are enough. If the service has not received data yet, add a simple message such as "Information will appear after the carrier updates the shipment data." That lowers anxiety up front without promising something impossible.
Tracking Page via [wcafw_order_status]
The [wcafw_order_status] shortcode creates a form where the user enters an order identifier and receives delivery timelines. This is useful for guest orders and for customers who do not want to log into an account. Put that page somewhere easy to find: in the support menu, the footer, the post-shipment email, or the help section.
But a page like this carries a privacy risk. Do not make it a way to expose unnecessary order data based on a single easy-to-guess number. Check what the form actually displays: only delivery status, or also the customer's name, address, products, and other details. If the form reveals more than it should, it is better to keep email guidance minimal and use the standard customer account for detailed information.
Localization and Clear Wording
AfterShip and carriers often return English statuses or technical phrasing. If your audience is Russian-speaking, configure the surrounding text so the customer understands what action to take. "Available for Pickup" is better explained as "Your package is ready for pickup," and "Failed Attempt" as "A delivery attempt was made. Please check the carrier's notice." The exact statuses in the underlying data can remain in English, but the customer-facing text should be easy to understand.
Practical Scenario: A Test Order from Shipment to Email Verification
Below is a working scenario worth running before going live with real customers. It does not require code changes and helps verify several narrow points at once: the API key, carrier selection, tracking number storage, the WooCommerce email, the customer account, and the shortcode page.
Goal
You need to confirm that the customer receives clear shipping information without anyone manually sending a separate email. As a result, the test order should contain tracking data in the admin area, show a timeline on the order page, and the WooCommerce email should include tracking info at the correct point in the status flow.
Preparation
Prepare a test product, a test customer, a working email address for receiving emails, and a tracking number you can use for validation. Ideally, use a test shipment or a completed shipment that definitely returns data from the carrier. If you use a made-up tracking number, you will only be able to verify data storage, not the real timeline.
Make sure the AfterShip API key has been entered, the required shipping company is selected in the settings, WooCommerce email is sending properly, and the My Account page is not cached as a public static page.
Steps
- Create an order in WooCommerce or place one through the storefront as a customer.
- Move the order to the status that matches your process before shipment.
- Open the order screen and add the tracking code together with the carrier.
- Save the order and check whether the record appears in the plugin interface.
- If a customer email needs to be sent, move the order to the status selected for inserting tracking info.
- Open the customer's inbox and check the WooCommerce email.
- Log into the customer's account and open the order details.
- Open the shortcode page and check whether the information loads for the order number.
Result Verification
The result is considered successful if the admin area shows the saved tracking number, the customer sees either a timeline or a clear message that carrier data is still pending, the email contains tracking info without broken layout, and the shortcode page does not expose unnecessary personal data. If any of those checks fail, do not move on to bulk import.
A Note on Real-Time Updates
Even with correct setup, delivery events do not always appear instantly. AfterShip receives data from carriers and may return Pending if the shipment was just added or the carrier has not yet published any data. The service documentation also includes the Expired status for cases where tracking information has not been available for a long time. That is why it is useful in your support process to separate "the plugin did not save the tracking number" from "the carrier has not provided events yet." Those are different problems.
Result Checks, Performance, and Data Security
After the initial setup, it is important not only to see a nice-looking timeline but also to confirm that the workflow does not create side effects. The plugin works with orders, an external API, and emails, so your checks should cover admin performance, data privacy, email delivery, and behavior under error conditions.
How to Test Without Creating Unnecessary Load
The AfterShip Tracking API has endpoint limits. The documentation specifies different limits for creating tracking records, retrieving lists, retrieving an individual tracking record, and other operations. A typical store does not need to count every request manually, but during bulk import and frequent updates, it is important not to trigger the same action dozens of times in a row. If the API returns a 429 error, that is a sign that too many requests were sent in too short a time.
For the admin area, test two pages: the orders list and the order screen. If the orders list becomes noticeably heavier, temporarily reduce the displayed columns, disable unnecessary admin extensions on a staging copy, and check whether the site is trying to refresh statuses for too many orders at once. The CodeCanyon changelog mentions caching improvements and the fact that delivered orders no longer need status retrieval again in the orders list. That is a sensible optimization: completed shipments should not keep hammering the external API.
What Data You Should Not Send Unless Necessary
The AfterShip API supports additional fields, including order data, addresses, language, customer email, and phone number for notifications. But in the specific plugin and in your own process, you should send only what is actually needed for tracking and notifications. The AfterShip documentation specifically warns against including personal data in custom fields unless it is necessary.
A secure setup means minimizing data: tracking number, carrier, order number, and notification details only when they are genuinely required for the chosen workflow. If the store does not use AfterShip SMS notifications, do not send the phone number just in case. If you are not using custom fields, do not store the address or internal warehouse comments there.
Checking Emails After a Theme or Builder Update
Any update to the theme, email builder, or WooCommerce can affect email templates. Add one simple check to your internal procedure: after updates, send a test completed order email with tracking info. If the block disappears, shifts out of place, or gets duplicated, review overridden WooCommerce templates in the child theme and the email builder settings.
Safely Customizing Shipment Titles with Filters
On the CodeCanyon page, the author lists the wcafw_shipment_title and wcafw_shipment_order_id filters. These are documented extension points, so you can use them for light customization without editing the plugin files. The most useful option is to make the shipment title clearer for the customer, especially if the order includes multiple packages.
The code below is an example for a small site-specific plugin or a Code Snippets entry. Do not insert it into the CodeCanyon WooCommerce AfterShip plugin files, because your changes will be lost on update. Before using it, test it on a test order and make sure the title does not reveal unnecessary information.
add_filter( 'wcafw_shipment_title', 'store_wcafw_readable_shipment_title', 10, 2 );
function store_wcafw_readable_shipment_title( $title, $order ) {
if ( ! $order instanceof WC_Order ) {
return $title;
}
$order_number = $order->get_order_number();
return 'Shipment for order ' . $order_number;
}
The check is simple: open a test order that already has a tracking number, refresh the order details page in the customer account, and look at the timeline title. If the text appears but feels too long on mobile, shorten the wording. To roll it back, disable the snippet or remove the filter from the site-specific plugin.
The wcafw_shipment_order_id filter should be used more carefully. It changes the order identifier sent to AfterShip as the order id. If the store uses custom order numbers, that may be useful. But any identifier change affects data matching during import and troubleshooting. First check which number your managers see in their daily spreadsheets and which one is stored as the internal WooCommerce ID.
Multiple Packages, International Shipping, and Guest Orders
Shipment tracking plugins have one common trap: they look straightforward on a simple order, but real stores quickly go beyond the one-product, one-carrier scenario. A customer may receive an order in two boxes, the warehouse may ship part of the order later, an international parcel may move from the first carrier to a last-mile service, and a guest customer may never log into an account. CodeCanyon WooCommerce AfterShip should be configured with those scenarios in mind from the start, not after the first support ticket arrives.
One Order, Multiple Tracking Codes
If an order is split into two packages, the manager needs to add two tracking codes rather than replacing the first one with the second. The timeline should answer the question, "Which part of the order is where?" If your version has an interface for linking tracking codes to specific products, use it for expensive, heavy, preorder, or warehouse-split items. That makes support easier: the agent can see that the T-shirt was already delivered while the accessory is still in transit, and will not promise full delivery based on a single event.
A partial-shipment workflow is best documented in your internal process. For example: "If an order ships in two boxes, the first tracking number is labeled Main Package and the second is labeled Additional Package; if one tracking number replaces an incorrect one, the old one is removed only after review by a senior manager." That kind of simple rule prevents chaos in CSV import and manual edits.
For the customer, the shipment title should stay short. Do not display internal warehouse codes, picker names, warehouse addresses, or supplier comments in the heading. If you need more understandable titles, use the wcafw_shipment_title filter and return neutral text. The public shipment title should help the customer understand delivery, not expose the store's internal process.
International Shipping and Last-Mile Logic
International shipments often pass through multiple services. The first carrier accepts the package in the origin country, then it is handed off to an international carrier, and in the destination country a last-mile carrier appears. The AfterShip API includes fields and logic that help account for last-mile data, but in the interface of a specific WordPress plugin, you still need to check which data is available to the manager.
In practice, that means: do not choose the carrier based only on the brand shown on the first label if the customer will actually track the package on the final leg through another service. Test one real international order and see how AfterShip combines the events. If the status looks incomplete, try specifying a more precise carrier or courier slug, or enable the required company in AfterShip. If the carrier requires additional fields, do not try to work around that by randomly selecting a similar carrier.
Also verify the notification language separately. The AfterShip API includes a customer language field, and the CodeCanyon product mentions email template localization when using WPML. If the store sells into multiple countries, do not mix the status language, the WooCommerce email language, and the tracking page language. For a Russian storefront, the explanatory text should be in Russian, but exact statuses and carrier names may remain in their original form if they come from the service.
Guest Customer and the "Track Your Order" Page
A guest customer often does not remember whether they created an account. If you simply say "log in to your account," some of them will go straight to support. The page built with the [wcafw_order_status] shortcode solves that problem, but it needs to be part of the user journey. Add a link to it in the post-shipment email, in the footer, in the help section, and, where appropriate, on the shipping page.
At the same time, do not make the tracking form the only source of truth. The order details page should still work for logged-in users. If the customer account is broken while the shortcode works, that is not a normal state. It is a sign of a theme, cache, or order-template conflict. And the reverse is true as well: if the customer account works but the shortcode page shows nothing, check which order id the form expects and whether page caching rules are interfering with it.
Decision Table for Complex Shipments
| Situation | What to do in the plugin | What the customer should see |
|---|---|---|
| The order shipped in two boxes | Add two tracking codes and, if available, link them to the products | Two timelines or two clearly labeled shipments are visible in the order |
| The first tracking code was incorrect | Delete or replace it only after confirming the order and the carrier | The email and customer account no longer show the old incorrect link |
| The package was handed off to a last-mile carrier | Check that the carrier is selected correctly and that AfterShip events are appearing | The status does not stop at the international handoff |
| The customer placed the order without an account | Provide a link to the page with [wcafw_order_status]
|
The form shows only the required tracking data |
Manager Workflow: Who Adds the Tracking Number and Who Handles Corrections
Technical setup will not save you if the store process itself is undocumented. The plugin may accept tracking codes correctly, but managers may add them too late, change the order status before entering the tracking number, choose the first vaguely similar carrier, or import a CSV without checking it. That is why it is worth writing a short procedure before launch. It does not need to be a heavy instruction manual spanning dozens of pages. A single page with roles, action sequence, error rules, and control points is enough.
Roles in the Process
Usually, three roles are involved. The warehouse or fulfillment team creates the shipment and receives the tracking code. The store manager transfers or imports that number into WooCommerce. Support answers customer questions when the status looks unclear. Even if those roles overlap, still write down who performs which action in the system.
A useful rule is this: the person adding the tracking code should not have to guess the carrier. If the warehouse passes along the number, it should also provide the shipping service. If the shipping service comes from an external spreadsheet, use a single naming glossary so that "DHL," "DHL Express," and "DHL eCommerce" do not turn into random choices in the admin area.
Action Sequence for One Order
- The warehouse or manager receives the tracking code from the carrier or logistics platform.
- The manager opens the WooCommerce order and verifies the order number, the customer, and the shipment contents.
- The manager adds the tracking code and selects the carrier in the WooCommerce AfterShip block.
- If the order is partial, the manager adds a separate shipment instead of replacing the existing one.
- The manager saves the order and checks that the tracking number is still there after refreshing the page.
- Only after that is the order moved to the status that sends the customer an email with tracking info.
- In a disputed case, the manager adds an internal order note rather than a public customer comment.
This sequence is especially important for emails. If the status changes first, the email may go out without the tracking number. Then the manager adds the data, sees it in the admin area, and assumes everything is fine, while the customer has already received an incomplete notification. You can fix that with a resent email or a separate customer note, but that is extra manual work.
Error Correction Rule
An incorrect tracking code should be corrected in a way that does not create even more confusion. First check whether the customer email has already been sent. If it has not, you can replace the number and save the order. If the email already went out, it is better to add the correct tracking number and send the customer a clear message about the replacement without blaming the carrier or overwhelming the customer with details.
If the wrong tracking number was included in a CSV import for many orders, stop all further imports. Select a few orders from different parts of the file and determine the rule behind the mistake. Only then prepare a corrected file. Do not run "one more import on top" until you understand whether it will add new rows, replace old ones, or create duplicates.
What Support Should Know
Support does not need access to the API key, but it does need to understand the status wording. Pending does not mean "lost," Exception does not always mean a final problem, AvailableForPickup requires customer action, and AttemptFail is often tied to a failed delivery attempt. Prepare short replies for each state and specify when support should contact the carrier and when it is enough to wait for an update.
Another useful practice is keeping internal order notes. If a customer contacts support, the agent checks the carrier website, and finds that the package is waiting at a pickup location, that information should be left as a private note. The next agent will see the context and will not have to start troubleshooting from scratch.
How to Separate WooCommerce and AfterShip Notifications Without Duplicating Messages
Notifications are one of the most sensitive parts of the workflow. Customers get irritated quickly if they receive several emails with the same tracking number but different wording. On the other hand, if there are too few notifications, they open a support chat. CodeCanyon WooCommerce AfterShip can insert tracking info into WooCommerce notification emails and also offers optional active email notifications. AfterShip as a service also provides email and SMS notifications in its own products. Before launch, you need to decide exactly who sends what message to the customer and at what moment.
One Source of Truth for the First Tracking Message
The first message with the tracking number should usually come from WooCommerce, because the customer is already expecting an email from the store after the order status changes. That email can show the tracking info and a link to the order page. If you enable both the plugin's active notification and AfterShip notifications at the same time, the customer may receive two or three messages about almost the same event.
Choose one primary channel for the first tracking message. For example: WooCommerce sends the completed email with tracking info, and AfterShip is used only for later milestone notifications. Or the other way around: WooCommerce sends a short shipment email, while the detailed statuses come through AfterShip. The important thing is not to turn on every channel without mapping your event flow.
Event Map
Create a simple event table. It will help you catch duplicates before launch.
| Event | Who sends it | What the customer receives |
|---|---|---|
| Order handed off for shipment | WooCommerce email with tracking info | Shipment number, carrier, order link |
| Package in transit | AfterShip notification, if enabled | A short status update without repeating the full order history |
| Delivery attempt failed | AfterShip or support, depending on your process | A clear action: check the carrier notice or contact the shipping service |
| Delivery completed | AfterShip or a separate marketing workflow | Delivery confirmation and, if appropriate, a soft invitation to return to the store |
This table does not have to look exactly like this. What matters is that each event has a single owner. If the customer receives the same information from WooCommerce, AfterShip, and a marketing platform, that is not care. It is noise.
What to Do with SMS
SMS should be enabled only where it is genuinely useful: high-value items, urgent shipping, pickup locations with a short hold window, or an audience that rarely reads email. SMS is more expensive and more sensitive from a consent perspective. If you are not sure you have both the need and the right to send SMS, start with email and the customer account.
If SMS is enabled through AfterShip, make sure the phone number is sent only for orders where notifications are allowed. Do not automatically use the phone number from the billing address for all marketing and delivery messages without checking the legal basis and the consent settings.
Troubleshooting Common Problems with Tracking Numbers, Emails, and Statuses
Problems with CodeCanyon WooCommerce AfterShip usually look the same at first glance: "nothing is showing," "the email went out without the tracking number," "the status is not updating," or "the wrong carrier was selected." But the underlying causes differ. Below is a practical troubleshooting path from the visible symptom to the actual check and fix.
The Timeline Does Not Appear in the Order
Symptom: the manager added a tracking number, but the customer does not see the timeline in the order details. Possible causes: the tracking number was not saved, the wrong carrier was selected, the API key is not working, the customer account page is cached, or the theme or another plugin changed the order template.
Start by checking the admin area: does the tracking number remain visible on the order screen after refreshing, or does it disappear. If it disappears, the issue is in data saving or user permissions. If it stays, check AfterShip: does the shipment exist in the account, what status is shown there, and is it sitting in Pending. Then open the customer account in customer mode and in a private browser window.
The fix depends on the cause. For caching, exclude the My Account page and the shortcode page. For the wrong carrier, correct the company or courier in the tracking record. For a theme conflict, temporarily switch to a default theme on a staging copy or disable the account customization plugin to isolate the issue.
The Status Stays at Pending for Too Long
Symptom: the tracking number is saved, but AfterShip does not show movement. Possible causes: the carrier has not yet accepted the package, the number was entered before scanning, the wrong carrier was selected, the specific carrier requires additional data, or the tracking number itself is incorrect.
AfterShip describes Pending as the state of a new shipment or a shipment with no tracking information available yet. That is not always an error. Check the number on the carrier website, confirm that it has been accepted into the system, and compare the selected carrier with the actual one. If the carrier requires additional fields, fill them in through the available interface or revise the data handoff process.
The WooCommerce Email Went Out Without Tracking Info
Symptom: the order has the tracking number, the customer account shows the timeline, but the customer email arrived without tracking info. Possible causes: the email was sent before the tracking number was added, a different status trigger is selected, the email template is overridden by the theme, or the email builder does not output the standard WooCommerce hooks.
Check the manager's action sequence. If they move the order to Completed first and add the tracking number afterward, the completed email may already have gone out without the data. Reverse the process: first the tracking number, then the status, then the email. If an email builder is in use, create a test email and verify that it outputs WooCommerce extension blocks correctly.
CSV Import Added Data to the Wrong Orders
Symptom: after import, the tracking number ended up on a different order or did not appear at all. Possible causes: the file contains the internal ID instead of the visible order number, the site uses a custom order number plugin, the file encoding is wrong, extra spaces are present, or existing tracking numbers were overwritten instead of appended.
Stop the bulk import and test one row manually. Compare the order identifier in the CSV with what the plugin expects. If the store uses custom order numbers, check the settings and compatibility. Before rerunning the import, create a small file with a few rows and verify the result on test orders.
AfterShip API Returns a Limit or Access Error
Symptom: requests fail, statuses do not update, and the logs show access errors or too many requests. Possible causes: an incorrect API key, an unavailable plan level, requests sent too often, outbound HTTPS requests blocked by the hosting provider, or a temporary service-side issue.
Start with the key and the AfterShip plan. Then check the WooCommerce logs and the AfterShip system status. If you see 429, reduce the frequency of actions: do not rerun the import immediately, do not repeat the same operation many times, and split large batches into smaller ones. If the error looks network-related, verify that outbound HTTPS requests are allowed from the server.
When It Is Better to Roll Back a Setting
A rollback is appropriate if a setting breaks emails, shows one customer another customer's data, causes errors on the order page, or interferes with checkout. In that case, temporarily disable active notifications, restore the default status trigger, remove the custom snippet, remove the shortcode page from the menu, and fall back to manual tracking communication until you find the cause.
Questions That Usually Come Up Before Implementation
Do You Need an AfterShip Account to Use CodeCanyon WooCommerce AfterShip?
Yes. The plugin depends on the AfterShip service and requires an API key. The CodeCanyon listing also states that an appropriate AfterShip plan is required. Without an account and API access, the plugin will not be able to retrieve delivery statuses.
Can You Use the Plugin Only to Manually Insert a Carrier Link?
Technically, tracking data is added manually or through import, but the point of the product is the AfterShip timeline and integration with the service. If you only need a simple link in an email, a lighter extension may be the more practical choice.
What Should You Do if the Customer Checked Out Without an Account?
Use the page with the [wcafw_order_status] shortcode, if it fits your process and does not expose unnecessary data. Place a link to that page in the post-shipment email or in the help section.
Why Is the Order Completed if Delivery Is Not Finished Yet?
Because the WooCommerce status describes the state of the order inside the store, while the AfterShip status describes the movement of the shipment with the carrier. In some stores, Completed means "the store has shipped the order," not "the customer has received the package." Your team and your customers need to understand that distinction.
Can You Add Multiple Tracking Numbers to One Order?
According to the product description, the timeline is shown for each tracking code linked to the order. This is useful for partial shipments. Test it on a sample order to see how your version of the plugin displays multiple packages and how that looks in emails.
Is the Plugin Compatible with HPOS?
The CodeCanyon changelog mentions improved HPOS compatibility. But you still need to verify this on a live site, because the actual result depends on WooCommerce, the theme, other extensions, and the order sync mode.
Why Does AfterShip Show Expired or Fail to Update the Shipment for a Long Time?
Expired means tracking information has been unavailable for a long time. A common reason is that the carrier is not publishing data for the number, the number is incorrect, or the wrong courier was selected. Check the tracking number on the carrier website and verify the shipping company selection.
Can You Edit the Plugin Files to Change the Shipment Title?
You should not. The product author documented the wcafw_shipment_title and wcafw_shipment_order_id filters. Use them through a site-specific plugin or Code Snippets so your changes do not disappear on update.
When CodeCanyon WooCommerce AfterShip Is the Right Choice
CodeCanyon WooCommerce AfterShip is worth using if your store already runs on WooCommerce, ships physical goods, is ready to connect AfterShip, and wants to show customers a clear delivery timeline directly in the order, the emails, and a separate tracking page. Its strongest use cases include multiple carriers, frequent customer questions about delivery, guest orders, CSV tracking import, and the need to link multiple shipments to a single order.
Before launch, test not only the installation but the entire data flow: the API key, the carrier list, tracking number storage, order status, email, customer account, shortcode, caching, and behavior in Pending. If a test order makes it through that chain successfully, you can start connecting real shipments gradually and train managers on a single consistent process.
If the product fits your workflow after testing, you can download the CodeCanyon WooCommerce AfterShip archive and deploy it first on a test order, then in the live shipment workflow. Do not start with bulk CSV import. First get a stable result on a single order, then scale the setup.


