{"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-08-18T17:52:30","modified_gmt":"2026-08-18T17:52:30","slug":"vanquish-shipping-tracking-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/vanquish-shipping-tracking-for-woocommerce\/","author":14329766,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.11","stable_tag":"1.0.11","tested":"7.0.4","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-08-18 17:52:30","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":10,"downloads":558,"num_ratings":3,"support_threads":4,"support_threads_resolved":4,"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.10":{"tag":"1.0.10","author":"vanquish83","date":"2026-08-17 14:32:21"},"1.0.11":{"tag":"1.0.11","author":"vanquish83","date":"2026-08-18 17:52:30"},"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"},"1.0.4":{"tag":"1.0.4","author":"vanquish83","date":"2026-07-22 08:28:33"},"1.0.5":{"tag":"1.0.5","author":"vanquish83","date":"2026-07-23 07:30:14"},"1.0.6":{"tag":"1.0.6","author":"vanquish83","date":"2026-07-23 14:48:15"},"1.0.7":{"tag":"1.0.7","author":"vanquish83","date":"2026-07-31 07:46:26"},"1.0.8":{"tag":"1.0.8","author":"vanquish83","date":"2026-08-06 12:04:33"},"1.0.9":{"tag":"1.0.9","author":"vanquish83","date":"2026-08-15 07:30:45"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"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":3653354,"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.10","1.0.11","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9"],"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<li><strong>Automatic shipment monitoring<\/strong> \u2014 check your tracked shipments on a schedule and act on what changes. Tell customers when their parcel is out for delivery, ready for pickup or delivered, and get told yourself when one reports a problem or stops moving for a number of days you choose. Each event is announced once per shipment, delivered parcels are never polled again, and a \"check now\" button runs a pass immediately.<\/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. Your orders keep their tracking: carrier, tracking number and dispatch date are converted the first time each order is loaded, so there is no bulk operation to run. Custom carriers, and the extra shipments and notes if you used them, come across too.<\/p>\n\n<p>Your settings are migrated as well: the tracking messages (including every language, on a WPML or Polylang site) and the order statuses the tracking is shown on. The placeholders are the same in both plugins, so your wording carries over unchanged. Anything that has no equivalent in the new plugin \u2014 most of the old options page was workarounds this plugin no longer needs \u2014 is simply left behind, and the advanced features have their own settings pages to fill in.<\/p>\n\n<p>The migration never overwrites something you have already configured here, and it does not delete the old plugin's data.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20wording%20of%20the%20emails%20the%20plugin%20sends%3F\"><h3>Can I change the wording of the emails the plugin sends?<\/h3><\/dt>\n<dd><p>Yes. Every email is a standard WooCommerce email, so you edit it under <strong>WooCommerce \u2192 Settings \u2192 Emails<\/strong>, exactly like the ones WooCommerce sends itself: subject, heading, extra content, the enable switch and your store's branding. The plugin adds \"Order shipped\", \"Shipment status update\" and \"Shipment needs attention\" (the last one goes to you, not the customer, and lets you set the recipient).<\/p>\n\n<p>The tracking block inside those emails comes from the message you write in <strong>Shipping Tracking \u2192 Messages<\/strong>, where you can use placeholders such as the tracking number, the carrier name, the tracking link and the products carried by that shipment.<\/p>\n\n<p>On top of that, the two monitoring emails accept placeholders in their <strong>Subject<\/strong>, <strong>Email heading<\/strong> and <strong>Additional content<\/strong> fields: <code>{order_number}<\/code>, <code>{tracking_number}<\/code>, <code>{carrier}<\/code> and <code>{associated_products}<\/code>, plus <code>{status}<\/code> on the status update and <code>{issue}<\/code> on the admin alert. So a subject like <code>Your {carrier} parcel: {status}<\/code> or an extra line saying <code>This parcel contains: {associated_products}<\/code> works without touching any template.<\/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.11<\/h4>\n\n<ul>\n<li>Dates in the admin now follow your own settings. The dispatch date, the extra shipments, the requested delivery date and Quick assign show the format from Settings &gt; General &gt; Date Format, and their calendars start on the day set in \"Week starts on\". Until now those fields were drawn by the browser, so they showed the date format of the computer's language rather than the one the shop uses \u2014 a European store on an English-language computer got 08\/17\/2026 and weeks starting on Sunday, with no setting anywhere that could change it.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Fixed a fatal error when both the free and the Premium copies are installed. Premium lives in its own folder, so installing the free version from WordPress.org does not replace it \u2014 the two sit side by side, and activating the second one failed with \"the plugin triggered a fatal error\". It now activates cleanly, and says that a second copy is installed so you can remove the one you do not want.<\/li>\n<li>The free version now says so when it finds an active Premium licence on the site. Premium and Free share the same plugin here, so installing the WordPress.org download over a Premium copy replaces it with the free build and the premium features simply disappear, with nothing to explain why. There is now a notice, and a page describing how to put Premium back.<\/li>\n<li>The \"Activate Premium\" page points out that activating the licence is also what delivers Premium updates, and links to the customer dashboard at its current address.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Fixed: PHP 8.4 deprecation notices from CSV reading. On the order screen this produced one notice per carrier \u2014 over 1,600 of them on a single page load.<\/li>\n<li>Fixed: the estimator loaded its translations earlier than WordPress allows, which produced a \"_load_textdomain_just_in_time was called incorrectly\" notice on WordPress 6.7 and later.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>You can now choose whether the tracking appears before or after the order table, separately for the emails and for the order details page (Shipping Tracking \u2192 Settings).<\/li>\n<li>Changed: in emails the tracking is now shown <strong>before<\/strong> the order table by default, which is where the legacy CodeCanyon plugin put it and where customers look first in a shipping email. If you prefer it at the bottom, set \"Position in emails\" to \"After the order table\".<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>New \"Activate Premium\" page explaining how to install the Premium package after buying a licence, since Premium is a separate download rather than a key entered in the free version. Also linked from the Plugins screen.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Migrating from the CodeCanyon plugin now brings your settings across as well: the tracking messages, in every language on a multilingual site, and the order statuses the tracking is shown on. It never overwrites anything you have already configured here, and the old plugin's data is left untouched.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Internal: every settings screen now saves through a separately testable path, covered by an automated test suite. No change in behaviour \u2014 groundwork so that a bug like the one fixed in 1.0.2 is caught before a release rather than after it.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>New: automatic shipment monitoring. Your tracked shipments are checked on a schedule, so customers can be told when their parcel is out for delivery, ready for pickup or delivered, and you can be told when one reports a problem or stops moving. Off until you enable it; each event is announced once per shipment, and delivered parcels are never checked again.<\/li>\n<li>New: a \"check now\" button that runs one pass immediately instead of waiting for the schedule.<\/li>\n<li>The email settings screens now list the available placeholders in plain sight instead of hiding them in a tooltip, and accept {tracking_number}, {carrier} and {associated_products} in the subject, heading and additional content.<\/li>\n<\/ul>\n\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:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/341785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=341785"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanquish83"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=341785"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=341785"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=341785"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=341785"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=341785"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=341785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}