{"id":341785,"date":"2026-07-21T07:35:49","date_gmt":"2026-07-21T07:35:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/vanquish-shipping-tracking-for-woocommerce\/"},"modified":"2026-07-21T17:59:06","modified_gmt":"2026-07-21T17:59:06","slug":"vanquish-shipping-tracking-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/vanquish-shipping-tracking-for-woocommerce\/","author":14329766,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.0.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Vanquish Shipping Tracking for WooCommerce","header_author":"Vanquish","header_description":"Add shipping tracking numbers to WooCommerce orders and emails, and link customers to the carrier tracking page. Premium adds an in-site shipping timeline, delivery date estimates and more.","assets_banners_color":"e6deef","last_updated":"2026-07-21 17:59:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/vanquish-shipping-tracking-for-woocommerce\/","header_author_uri":"https:\/\/vanquishplugins.com\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":83,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"vanquish83","date":"2026-07-21 07:35:27"},"1.0.1":{"tag":"1.0.1","author":"vanquish83","date":"2026-07-21 08:55:25"},"1.0.2":{"tag":"1.0.2","author":"vanquish83","date":"2026-07-21 09:08:59"},"1.0.3":{"tag":"1.0.3","author":"vanquish83","date":"2026-07-21 17:59:06"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3616622,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3616622,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3616622,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3616622,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3617569,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=wc-orders\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Vanquish Shipping Tracking for WooCommerce\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"vanquish-shipping-tracking-for-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"emoza-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\\/**\\n * Live Preview seeding for WordPress Playground.\\n *\\n * This is the SOURCE of the runPHP step in blueprint.json (see build.py). It runs\\n * AFTER WooCommerce and the FREE build of the plugin are active, and leaves the\\n * site with a store that already has a handful of orders carrying real-looking\\n * tracking, so the admin orders list shows the plugin's tracking column populated\\n * the moment the visitor lands.\\n *\\n * Landing page is \\\/wp-admin\\\/admin.php?page=wc-orders (HPOS). Recent WooCommerce\\n * defaults NEW installs to HPOS, and Playground always installs the latest, so\\n * that route exists. We deliberately do NOT flip the HPOS option here: the data\\n * stores are resolved when WooCommerce boots, i.e. before this script runs, so\\n * toggling it mid-request would create the orders in one store and list them from\\n * the other.\\n *\\n * The tracking codes are AfterShip's public sample codes (see\\n * assets\\\/tracking code examples\\\/various-aftership.txt) \\u2014 no real customer data.\\n *\\n * Idempotent: guarded by the vanstr_demo_seeded option, so a re-run is harmless.\\n *\\\/\\n\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\nif ( get_option( 'vanstr_demo_seeded' ) ) {\\n\\treturn;\\n}\\n\\n\\\/* ---------------------------------------------------------------------------\\n * 1. Store scaffolding\\n * ------------------------------------------------------------------------ *\\\/\\n\\nif ( class_exists( 'WC_Install' ) ) {\\n\\tWC_Install::create_pages();\\n}\\n\\n\\\/\\\/ A fresh WooCommerce ships in \\\"coming soon\\\" mode, which would show visitors a\\n\\\/\\\/ placeholder splash instead of the store.\\nupdate_option( 'woocommerce_coming_soon', 'no' );\\n\\n\\\/\\\/ Currency and a tidy front page title.\\nupdate_option( 'woocommerce_currency', 'EUR' );\\n\\n\\\/* Tidy the front-end navigation: drop the default Sample Page and build a real\\n * menu, which also removes the theme's auto \\\"Home\\\" fallback entry. *\\\/\\n$vanstr_sample = get_page_by_path( 'sample-page' );\\nif ( $vanstr_sample ) {\\n\\twp_delete_post( $vanstr_sample->ID, true );\\n}\\n\\nif ( function_exists( 'wc_get_page_id' ) && ! wp_get_nav_menu_object( 'vanstr-demo-menu' ) ) {\\n\\t$vanstr_menu_id = wp_create_nav_menu( 'vanstr-demo-menu' );\\n\\n\\tforeach ( array(\\n\\t\\t'Shop'       => wc_get_page_id( 'shop' ),\\n\\t\\t'Cart'       => wc_get_page_id( 'cart' ),\\n\\t\\t'Checkout'   => wc_get_page_id( 'checkout' ),\\n\\t\\t'My account' => wc_get_page_id( 'myaccount' ),\\n\\t) as $vanstr_label => $vanstr_page_id ) {\\n\\t\\tif ( $vanstr_page_id && $vanstr_page_id > 0 ) {\\n\\t\\t\\twp_update_nav_menu_item(\\n\\t\\t\\t\\t$vanstr_menu_id,\\n\\t\\t\\t\\t0,\\n\\t\\t\\t\\tarray(\\n\\t\\t\\t\\t\\t'menu-item-title'     => $vanstr_label,\\n\\t\\t\\t\\t\\t'menu-item-object'    => 'page',\\n\\t\\t\\t\\t\\t'menu-item-object-id' => $vanstr_page_id,\\n\\t\\t\\t\\t\\t'menu-item-type'      => 'post_type',\\n\\t\\t\\t\\t\\t'menu-item-status'    => 'publish',\\n\\t\\t\\t\\t)\\n\\t\\t\\t);\\n\\t\\t}\\n\\t}\\n\\n\\t$vanstr_locations = get_theme_mod( 'nav_menu_locations' );\\n\\tif ( ! is_array( $vanstr_locations ) ) {\\n\\t\\t$vanstr_locations = array();\\n\\t}\\n\\tforeach ( array_keys( (array) get_registered_nav_menus() ) as $vanstr_location ) {\\n\\t\\t$vanstr_locations[ $vanstr_location ] = $vanstr_menu_id;\\n\\t}\\n\\tset_theme_mod( 'nav_menu_locations', $vanstr_locations );\\n}\\n\\n\\\/* Payments and shipping, so the demo checkout can actually be completed:\\n * Cash on delivery needs no keys, free shipping needs no configuration. *\\\/\\n$vanstr_cod = get_option( 'woocommerce_cod_settings', array() );\\nif ( ! is_array( $vanstr_cod ) ) {\\n\\t$vanstr_cod = array();\\n}\\nif ( empty( $vanstr_cod['enabled'] ) || 'yes' !== $vanstr_cod['enabled'] ) {\\n\\t$vanstr_cod['enabled']            = 'yes';\\n\\t$vanstr_cod['title']              = 'Cash on delivery';\\n\\t$vanstr_cod['enable_for_virtual'] = 'yes';\\n\\tupdate_option( 'woocommerce_cod_settings', $vanstr_cod );\\n}\\n\\nif ( class_exists( 'WC_Shipping_Zone' ) ) {\\n\\t$vanstr_zone = new WC_Shipping_Zone( 0 ); \\\/\\\/ Anything not matched by another zone.\\n\\t$vanstr_has_free = false;\\n\\tforeach ( $vanstr_zone->get_shipping_methods() as $vanstr_method ) {\\n\\t\\tif ( 'free_shipping' === $vanstr_method->id ) {\\n\\t\\t\\t$vanstr_has_free = true;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\tif ( ! $vanstr_has_free ) {\\n\\t\\t$vanstr_zone->add_shipping_method( 'free_shipping' );\\n\\t\\t$vanstr_zone->save();\\n\\t}\\n}\\n\\n\\\/* ---------------------------------------------------------------------------\\n * 2. Plugin configuration\\n * ------------------------------------------------------------------------ *\\\/\\n\\n\\\/* Limit the carrier dropdown to the ones this demo actually uses. Left empty the\\n * plugin offers all 1,600+, which is correct but makes the metabox select noisy\\n * for someone seeing it for the first time. *\\\/\\nupdate_option(\\n\\t'vanstr_enabled_carriers',\\n\\tarray( 'dhl', 'fedex', 'usps', 'china-post', 'yunexpress', 'yanwen', 'purolator' )\\n);\\n\\n\\\/* One custom carrier, to show that a merchant is not limited to the bundled list.\\n * %s is the tracking-code placeholder. *\\\/\\nif ( ! get_option( 'vanstr_custom_companies' ) ) {\\n\\tupdate_option(\\n\\t\\t'vanstr_custom_companies',\\n\\t\\tarray(\\n\\t\\t\\tarray(\\n\\t\\t\\t\\t'name'                 => 'Acme Local Courier',\\n\\t\\t\\t\\t'url'                  => 'https:\\\/\\\/example.com\\\/track?code=%s',\\n\\t\\t\\t\\t'disable_tracking_url' => false,\\n\\t\\t\\t),\\n\\t\\t)\\n\\t);\\n}\\n\\n\\\/* show_on_statuses is deliberately left unset: empty means \\\"every status\\\", which\\n * is what we want for a demo where orders sit in different states. *\\\/\\n\\n\\\/* ---------------------------------------------------------------------------\\n * 3. Products\\n * ------------------------------------------------------------------------ *\\\/\\n\\n$vanstr_catalog = array(\\n\\tarray( 'slug' => 'wireless-headphones', 'name' => 'Wireless Headphones', 'price' => '89' ),\\n\\tarray( 'slug' => 'espresso-machine',    'name' => 'Espresso Machine',    'price' => '249' ),\\n\\tarray( 'slug' => 'running-shoes',       'name' => 'Running Shoes',       'price' => '120' ),\\n);\\n\\n$vanstr_product_ids = array();\\n\\nforeach ( $vanstr_catalog as $vanstr_item ) {\\n\\t$vanstr_existing = get_page_by_path( $vanstr_item['slug'], OBJECT, 'product' );\\n\\n\\tif ( $vanstr_existing ) {\\n\\t\\t$vanstr_product_ids[] = $vanstr_existing->ID;\\n\\t\\tcontinue;\\n\\t}\\n\\n\\tif ( ! class_exists( 'WC_Product_Simple' ) ) {\\n\\t\\tcontinue;\\n\\t}\\n\\n\\t$vanstr_product = new WC_Product_Simple();\\n\\t$vanstr_product->set_name( $vanstr_item['name'] );\\n\\t$vanstr_product->set_slug( $vanstr_item['slug'] );\\n\\t$vanstr_product->set_status( 'publish' );\\n\\t$vanstr_product->set_catalog_visibility( 'visible' );\\n\\t$vanstr_product->set_regular_price( $vanstr_item['price'] );\\n\\t$vanstr_product->set_price( $vanstr_item['price'] );\\n\\t$vanstr_product->save();\\n\\n\\t$vanstr_product_ids[] = $vanstr_product->get_id();\\n}\\n\\n\\\/* ---------------------------------------------------------------------------\\n * 4. Orders, with tracking\\n *\\n * Tracking codes are AfterShip's published samples. The last entry deliberately\\n * has NO tracking, so the orders list also shows what an untracked order looks\\n * like next to the tracked ones.\\n * ------------------------------------------------------------------------ *\\\/\\n\\n$vanstr_orders = array(\\n\\tarray( 'first' => 'Emma',   'last' => 'Wilson',   'city' => 'Manchester', 'country' => 'GB', 'status' => 'completed',  'carrier' => 'dhl',        'code' => '9284304315',                 'days' => 6 ),\\n\\tarray( 'first' => 'Lucas',  'last' => 'Moreau',   'city' => 'Lyon',       'country' => 'FR', 'status' => 'completed',  'carrier' => 'fedex',      'code' => '874596440373',               'days' => 5 ),\\n\\tarray( 'first' => 'Sofia',  'last' => 'Rossi',    'city' => 'Bologna',    'country' => 'IT', 'status' => 'processing', 'carrier' => 'usps',       'code' => '9261290339630916567074',     'days' => 3 ),\\n\\tarray( 'first' => 'Daniel', 'last' => 'Fischer',  'city' => 'Hamburg',    'country' => 'DE', 'status' => 'processing', 'carrier' => 'purolator',  'code' => '520658955486',               'days' => 2 ),\\n\\tarray( 'first' => 'Mei',    'last' => 'Chen',     'city' => 'Rotterdam',  'country' => 'NL', 'status' => 'processing', 'carrier' => 'china-post', 'code' => 'CY033767753CN',              'days' => 1 ),\\n\\tarray( 'first' => 'Pablo',  'last' => 'Herrera',  'city' => 'Valencia',   'country' => 'ES', 'status' => 'completed',  'carrier' => 'yunexpress', 'code' => 'YT2619400700618581',         'days' => 4 ),\\n\\tarray( 'first' => 'Anna',   'last' => 'Kowalski', 'city' => 'Krakow',     'country' => 'PL', 'status' => 'processing', 'carrier' => '',           'code' => '',                           'days' => 0 ),\\n);\\n\\nif ( function_exists( 'wc_create_order' ) && ! empty( $vanstr_product_ids ) ) {\\n\\t$vanstr_tracker = class_exists( '\\\\\\\\Vanquish\\\\\\\\ShippingTracking\\\\\\\\Com\\\\\\\\Order' )\\n\\t\\t? new \\\\Vanquish\\\\ShippingTracking\\\\Com\\\\Order()\\n\\t\\t: null;\\n\\n\\t$vanstr_index = 0;\\n\\n\\tforeach ( $vanstr_orders as $vanstr_data ) {\\n\\t\\t$vanstr_order = wc_create_order( array( 'customer_id' => 1 ) );\\n\\n\\t\\tif ( is_wp_error( $vanstr_order ) ) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\n\\t\\t\\\/\\\/ Vary the basket a little so the orders are not clones of each other.\\n\\t\\t$vanstr_product = wc_get_product( $vanstr_product_ids[ $vanstr_index % count( $vanstr_product_ids ) ] );\\n\\t\\tif ( $vanstr_product ) {\\n\\t\\t\\t$vanstr_order->add_product( $vanstr_product, 1 + ( $vanstr_index % 2 ) );\\n\\t\\t}\\n\\n\\t\\t$vanstr_order->set_address(\\n\\t\\t\\tarray(\\n\\t\\t\\t\\t'first_name' => $vanstr_data['first'],\\n\\t\\t\\t\\t'last_name'  => $vanstr_data['last'],\\n\\t\\t\\t\\t'email'      => strtolower( $vanstr_data['first'] ) . '@example.com',\\n\\t\\t\\t\\t'city'       => $vanstr_data['city'],\\n\\t\\t\\t\\t'country'    => $vanstr_data['country'],\\n\\t\\t\\t),\\n\\t\\t\\t'billing'\\n\\t\\t);\\n\\t\\t$vanstr_order->set_address(\\n\\t\\t\\tarray(\\n\\t\\t\\t\\t'first_name' => $vanstr_data['first'],\\n\\t\\t\\t\\t'last_name'  => $vanstr_data['last'],\\n\\t\\t\\t\\t'city'       => $vanstr_data['city'],\\n\\t\\t\\t\\t'country'    => $vanstr_data['country'],\\n\\t\\t\\t),\\n\\t\\t\\t'shipping'\\n\\t\\t);\\n\\n\\t\\t$vanstr_order->set_payment_method( 'cod' );\\n\\t\\t$vanstr_order->set_payment_method_title( 'Cash on delivery' );\\n\\t\\t$vanstr_order->calculate_totals();\\n\\t\\t$vanstr_order->set_status( $vanstr_data['status'] );\\n\\t\\t$vanstr_order->save();\\n\\n\\t\\tif ( $vanstr_tracker && '' !== $vanstr_data['code'] ) {\\n\\t\\t\\t$vanstr_tracker->set_tracking(\\n\\t\\t\\t\\t$vanstr_order,\\n\\t\\t\\t\\t$vanstr_data['code'],\\n\\t\\t\\t\\t$vanstr_data['carrier'],\\n\\t\\t\\t\\tgmdate( 'Y-m-d', strtotime( '-' . (int) $vanstr_data['days'] . ' days' ) )\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t++$vanstr_index;\\n\\t}\\n}\\n\\n\\\/* ---------------------------------------------------------------------------\\n * 5. Keep Freemius quiet inside the demo\\n *\\n * Mark the install as skipped (anonymous) so no opt-in\\\/connect notice greets a\\n * visitor who wanders into wp-admin. Guarded: Freemius state must never be able\\n * to break the preview.\\n * ------------------------------------------------------------------------ *\\\/\\n\\nif ( function_exists( 'vanstr_fs' ) ) {\\n\\ttry {\\n\\t\\tif ( ! vanstr_fs()->is_registered() ) {\\n\\t\\t\\tvanstr_fs()->skip_connection();\\n\\t\\t}\\n\\t} catch ( \\\\Exception $e ) {\\n\\t\\t\\\/\\\/ no-op\\n\\t}\\n}\\n\\n\\\/* Cancel Freemius' post-activation redirect.\\n *\\n * Freemius flags a fresh activation with a transient and, on the next admin page\\n * load, redirects to the plugin's own first page \\u2014 which would hijack the\\n * blueprint's landingPage and drop the visitor on the carriers screen instead of\\n * the orders list. The transient is the documented trigger (is_plugin_activation()\\n * reads exactly this key), so removing it is enough; skip_connection() above does\\n * not clear it.\\n *\\\/\\ndelete_transient( 'fs_plugin_vanquish-shipping-tracking-for-woocommerce_activated' );\\n\\nupdate_option( 'vanstr_demo_seeded', 1 );\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3616622,"resolution":"1","location":"assets","locale":"","width":540,"height":656},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3616622,"resolution":"10","location":"assets","locale":"","width":1795,"height":932},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3616622,"resolution":"2","location":"assets","locale":"","width":1090,"height":706},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3616622,"resolution":"3","location":"assets","locale":"","width":1682,"height":682},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3616622,"resolution":"4","location":"assets","locale":"","width":1666,"height":661},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3616622,"resolution":"5","location":"assets","locale":"","width":1859,"height":981},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3616622,"resolution":"6","location":"assets","locale":"","width":1303,"height":943},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3616622,"resolution":"7","location":"assets","locale":"","width":1011,"height":550},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3616622,"resolution":"8","location":"assets","locale":"","width":1470,"height":674},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3616622,"resolution":"9","location":"assets","locale":"","width":1461,"height":778}},"screenshots":{"1":"Assign a carrier, a tracking number and a dispatch date to any order, straight from the order screen.","2":"The tracking details as your customer sees them on the order details page.","3":"Choose which of the 1,600+ predefined carriers are offered when assigning tracking to an order.","4":"Define your own carriers, with a tracking URL template supporting the tracking code, postcode and country.","5":"Every customer-facing message is editable, with placeholders for the tracking number, carrier name and tracking link.","6":"Premium: the live shipment status shown as a timeline on the order page, with older events folded behind a toggle.","7":"Premium: per-product tracking and estimated shipping date, shown next to each product of the order.","8":"Premium: estimated shipping dates and per-method delivery estimates in the classic checkout.","9":"Premium: the same estimates in the WooCommerce block checkout.","10":"Premium: set a delivery estimate for each shipping method of each shipping zone."}},"plugin_section":[],"plugin_tags":[13827,45369,3546,550,286],"plugin_category":[36,45],"plugin_contributors":[78154,269507],"plugin_business_model":[],"class_list":["post-341785","plugin","type-plugin","status-publish","hentry","plugin_tags-delivery","plugin_tags-order-tracking","plugin_tags-shipping","plugin_tags-tracking","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-freemius","plugin_contributors-vanquish83","plugin_committers-vanquish83","plugin_support_reps-supportvanquishplugins"],"banners":{"banner":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/banner-772x250.png?rev=3616622","banner_2x":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/banner-1544x500.png?rev=3616622","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/icon-128x128.png?rev=3616622","icon_2x":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/icon-256x256.png?rev=3616622","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-1.png?rev=3616622","caption":"Assign a carrier, a tracking number and a dispatch date to any order, straight from the order screen."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-2.png?rev=3616622","caption":"The tracking details as your customer sees them on the order details page."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-3.png?rev=3616622","caption":"Choose which of the 1,600+ predefined carriers are offered when assigning tracking to an order."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-4.png?rev=3616622","caption":"Define your own carriers, with a tracking URL template supporting the tracking code, postcode and country."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-5.png?rev=3616622","caption":"Every customer-facing message is editable, with placeholders for the tracking number, carrier name and tracking link."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-6.png?rev=3616622","caption":"Premium: the live shipment status shown as a timeline on the order page, with older events folded behind a toggle."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-7.png?rev=3616622","caption":"Premium: per-product tracking and estimated shipping date, shown next to each product of the order."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-8.png?rev=3616622","caption":"Premium: estimated shipping dates and per-method delivery estimates in the classic checkout."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-9.png?rev=3616622","caption":"Premium: the same estimates in the WooCommerce block checkout."},{"src":"https:\/\/ps.w.org\/vanquish-shipping-tracking-for-woocommerce\/assets\/screenshot-10.png?rev=3616622","caption":"Premium: set a delivery estimate for each shipping method of each shipping zone."}],"raw_content":"<!--section=description-->\n<p>Vanquish Shipping Tracking for WooCommerce lets you attach a tracking number, a shipping carrier and a dispatch date to each WooCommerce order. The tracking information is shown to your customers in the order emails and on the order details \/ My Account page, with a direct link to the carrier's tracking page \u2014 the tracking code is pre-filled in the link whenever the carrier supports it.<\/p>\n\n<h4>Free features<\/h4>\n\n<ul>\n<li>Assign a carrier, tracking number and dispatch date to any order.<\/li>\n<li>1,600+ predefined carriers with direct tracking links, worldwide.<\/li>\n<li>Define your own custom carriers with a custom tracking URL template (supports tracking code, postcode and country placeholders).<\/li>\n<li>Tracking details inside the standard WooCommerce order emails.<\/li>\n<li>Tracking details on the order details \/ My Account page.<\/li>\n<li>Fully editable tracking messages (visual editor + placeholders such as the tracking number, carrier name and tracking link).<\/li>\n<li>Tracking column in the admin orders list.<\/li>\n<li>Customer tracking form shortcode (order number + billing email), with rate limiting.<\/li>\n<li>Control on which order statuses the tracking info is shown, and whether it is added to emails.<\/li>\n<li>HPOS (High-Performance Order Storage) compatible.<\/li>\n<li>Multilingual ready: with WPML or Polylang active, every customer-facing text can be entered per language, right on the plugin's settings pages.<\/li>\n<li>Automatic, lossless migration of settings and per-order tracking data from the legacy \"WooCommerce Shipping Tracking\" (CodeCanyon) plugin.<\/li>\n<\/ul>\n\n<h4>Premium features<\/h4>\n\n<ul>\n<li><strong>In-site shipping timeline<\/strong> \u2014 show the live shipment status (picked up, in transit, out for delivery, delivered\u2026) as a timeline on the order page, rendered by your site. Bring your own API key from AfterShip, TrackingMore or track123; requests go straight from your site to the service you chose. Includes a one-click connection test.<\/li>\n<li><strong>Multiple shipments per order<\/strong> \u2014 each parcel with its own carrier, tracking number, dispatch date, note and the products it contains.<\/li>\n<li><strong>Per-product tracking<\/strong> \u2014 when a shipment is tied to specific products, its tracking link is shown next to those products in the order and the emails (can be turned off).<\/li>\n<li><strong>Shipping estimates for products<\/strong> \u2014 show an estimated shipping (dispatch) date on the product page, cart, checkout, order and emails, computed from per product \/ category \/ tag rules (shipping days, cut-off hour, processing days, holidays, optional date range), with a configurable out-of-stock text.<\/li>\n<li><strong>Delivery estimates for shipping methods<\/strong> \u2014 attach a \"3\u20135 days\" style estimate to each shipping method, shown with the method at cart and checkout. Works in both the block and the classic checkout.<\/li>\n<li><strong>Requested delivery date<\/strong> \u2014 let customers pick a preferred delivery date (and an optional merchant-defined time slot) at checkout, within the window you configure (lead time, latest date, excluded weekdays and dates). Works in both the block and the classic checkout; editable from the admin order screen.<\/li>\n<li><strong>Bulk import<\/strong> \u2014 import tracking codes from a CSV (one row per shipment, auto-detected delimiter) with a progress bar, plus an optional scheduled import that fetches a CSV from a URL you configure.<\/li>\n<li><strong>Quick assign<\/strong> \u2014 fill in the tracking of many orders from a single screen, with filters, per-row notifications and an optional status change after saving.<\/li>\n<li><strong>\"Order shipped\" notification email<\/strong> \u2014 a real WooCommerce email, configured under WooCommerce \u2192 Settings \u2192 Emails like any other.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>The <strong>free version does not send any data to external services.<\/strong> It only builds direct links to the carriers' own tracking pages, which the customer opens in their browser.<\/p>\n\n<p>The <strong>premium version<\/strong> can connect to external services, in both cases configured and controlled entirely by you:<\/p>\n\n<ol>\n<li><strong>Tracking providers (in-site timeline).<\/strong> When you enable the shipping timeline and select a provider, the plugin sends the order's tracking number and carrier code to that provider's API to retrieve the shipment status, using the API key of your own account. No data is sent until you enter an API key and select the provider. Supported providers:\n\n<ul>\n<li>AfterShip \u2014 <a href=\"https:\/\/www.aftership.com\/\">https:\/\/www.aftership.com\/<\/a> (<a href=\"https:\/\/www.aftership.com\/legal\/terms-of-service\">terms<\/a>, <a href=\"https:\/\/www.aftership.com\/privacy\">privacy<\/a>)<\/li>\n<li>TrackingMore \u2014 <a href=\"https:\/\/www.trackingmore.com\/\">https:\/\/www.trackingmore.com\/<\/a> (<a href=\"https:\/\/www.trackingmore.com\/legal\/terms-of-use\">terms<\/a>, <a href=\"https:\/\/www.trackingmore.com\/privacy.html\">privacy<\/a>)<\/li>\n<li>track123 \u2014 <a href=\"https:\/\/www.track123.com\/\">https:\/\/www.track123.com\/<\/a> (<a href=\"https:\/\/www.track123.com\/en\/termsOfService\">terms<\/a>, <a href=\"https:\/\/www.track123.com\/privacy\">privacy<\/a>)<\/li>\n<\/ul><\/li>\n<li><strong>Scheduled CSV import.<\/strong> If you enable the scheduled bulk import, the plugin periodically downloads a CSV file from the URL that you configure (typically a feed published by your own warehouse or fulfilment service). No data is sent to that URL; the file is only fetched.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/vanquish-shipping-tracking-for-woocommerce<\/code> directory, or install the plugin through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Configure the plugin from the \"Shipping Tracking\" menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20without%20a%20third-party%20account%3F\"><h3>Does it work without a third-party account?<\/h3><\/dt>\n<dd><p>Yes. The free version links to the carriers' tracking pages and needs no external account or API key. In the premium version, the in-site timeline is the only feature that uses a tracking service \u2014 with your own API key.<\/p><\/dd>\n<dt id=\"does%20it%20support%20the%20woocommerce%20block%20checkout%3F\"><h3>Does it support the WooCommerce block checkout?<\/h3><\/dt>\n<dd><p>Yes. The checkout features (requested delivery date, delivery estimates on shipping methods, per-product shipping estimates) work in both the block checkout and the classic (shortcode) checkout.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Does it work with HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes, the plugin is fully compatible with HPOS and with the classic order storage.<\/p><\/dd>\n<dt id=\"i%20am%20migrating%20from%20the%20codecanyon%20%22woocommerce%20shipping%20tracking%22%20plugin.%20do%20i%20lose%20my%20data%3F\"><h3>I am migrating from the CodeCanyon \"WooCommerce Shipping Tracking\" plugin. Do I lose my data?<\/h3><\/dt>\n<dd><p>No. Settings are migrated automatically, and each order's tracking data is migrated the first time the order is loaded. Custom companies and additional shipments are preserved.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20the%20texts%20my%20customers%20see%3F\"><h3>Can I translate the texts my customers see?<\/h3><\/dt>\n<dd><p>The plugin ships translation-ready (POT file included). On top of that, if WPML or Polylang is active, the settings pages show one input per language for every customer-facing text (messages, labels, estimates), so you can translate them without extra tools.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Uninstalling the plugin no longer deletes your settings. Custom carriers, messages and rules survive a reinstall; the tracking on your orders was never deleted and still isn't.<\/li>\n<li>New \"Reset settings\" action, so clearing the configuration is now something you choose to do rather than a side effect of removing the plugin.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed a fatal error when saving the Shipping companies page.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>The \"Shipping tracking\" box now sits in the side column of the order screen, where it is visible without scrolling.<\/li>\n<li>Timeline: only the most recent events are shown, the older ones fold behind a \"show earlier updates\" toggle. How many stay visible is configurable.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Add shipping tracking to WooCommerce orders and emails, with one-click links to the carrier tracking page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/341785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=341785"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanquish83"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=341785"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=341785"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=341785"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=341785"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=341785"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=341785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}