Commit de835790f45 for woocommerce

commit de835790f458ffc8f0005dfb0d211cdff8767ebc
Author: Sam Najian <dev@najian.info>
Date:   Thu Mar 12 11:30:07 2026 +0100

    Fix checkout cart [shortcode] Shipment label is not correct (#63645)

    * Show shipping package title as "Shipment" instead of "Shipment 1" if there is only 1 package. Closes #63336.

    * add changelog

    * Cleanup the logic around showing the package number

    * Update tests for the introduced change

    * Update filter docs

    ---------

    Co-authored-by: helgatheviking <507025+helgatheviking@users.noreply.github.com>

diff --git a/plugins/woocommerce/changelog/issues-63336-shipping-package-name b/plugins/woocommerce/changelog/issues-63336-shipping-package-name
new file mode 100644
index 00000000000..e86f81238e5
--- /dev/null
+++ b/plugins/woocommerce/changelog/issues-63336-shipping-package-name
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Show shipping package title as "Shipment" instead of "Shipment 1"
diff --git a/plugins/woocommerce/client/blocks/docs/third-party-developers/extensibility/hooks/filters.md b/plugins/woocommerce/client/blocks/docs/third-party-developers/extensibility/hooks/filters.md
index df57219584f..bc4bb76820b 100644
--- a/plugins/woocommerce/client/blocks/docs/third-party-developers/extensibility/hooks/filters.md
+++ b/plugins/woocommerce/client/blocks/docs/third-party-developers/extensibility/hooks/filters.md
@@ -674,7 +674,7 @@ This hook allows to disable the compatibility layer for the blockified.

 | Argument | Type | Description |
 | -------- | ---- | ----------- |
-| 1 | \Automattic\WooCommerce\Blocks\Templates\boolean. |  |
+| 1 | \Automattic\WooCommerce\Blocks\Templates\boolean. | |

 ### Source

@@ -941,7 +941,7 @@ Automattic\WooCommerce\Blocks\Package::container()->get( Automattic\WooCommerce\
 Filters the shipping package name.

 ```php
-apply_filters( 'woocommerce_shipping_package_name', string $shipping_package_name, string $package_id, array $package )
+apply_filters( 'woocommerce_shipping_package_name', string $shipping_package_name, string $package_id, array $package, int $total_packages )
 ```


@@ -954,6 +954,7 @@ apply_filters( 'woocommerce_shipping_package_name', string $shipping_package_nam
 | $shipping_package_name | string | Shipping package name. |
 | $package_id | string | Shipping package ID. |
 | $package | array | Shipping package from WooCommerce. |
+| $total_packages | int | Total number of shipping packages. |

 ### Returns

diff --git a/plugins/woocommerce/includes/class-wc-cart.php b/plugins/woocommerce/includes/class-wc-cart.php
index 7df4a6f4d07..f92478a8a25 100644
--- a/plugins/woocommerce/includes/class-wc-cart.php
+++ b/plugins/woocommerce/includes/class-wc-cart.php
@@ -1707,7 +1707,7 @@ class WC_Cart extends WC_Legacy_Cart {
 		$index = 1;
 		foreach ( $shipping_packages as $key => $package ) {
 			$shipping_packages[ $key ]['package_id']   = $package['package_id'] ?? $key;
-			$shipping_packages[ $key ]['package_name'] = $this->get_shipping_package_name( $shipping_packages[ $key ], $index );
+			$shipping_packages[ $key ]['package_name'] = $this->get_shipping_package_name( $shipping_packages[ $key ], $index, count( $shipping_packages ) );
 			++$index;
 		}

@@ -1719,9 +1719,24 @@ class WC_Cart extends WC_Legacy_Cart {
 	 *
 	 * @param array $package Shipping package data.
 	 * @param int   $index Package number.
+	 * @param int   $total_packages Total number of packages.
 	 * @return string
 	 */
-	private function get_shipping_package_name( $package, $index ) {
+	private function get_shipping_package_name( $package, $index, $total_packages ) {
+
+		$shipping_package_name = _x( 'Shipment', 'shipping packages', 'woocommerce' );
+
+		/**
+		 * If there are multiple packages, use the index to show the package number.
+		 */
+		if ( 1 !== $total_packages ) {
+			$shipping_package_name = sprintf(
+				/* translators: %d: shipping package number. */
+				_x( 'Shipment %d', 'shipping packages', 'woocommerce' ),
+				$index
+			);
+		}
+
 		/**
 		 * Filters the shipping package name.
 		 *
@@ -1729,17 +1744,15 @@ class WC_Cart extends WC_Legacy_Cart {
 		 * @param string $shipping_package_name Shipping package name.
 		 * @param string $package_id Shipping package ID.
 		 * @param array $package Shipping package from WooCommerce.
+		 * @param int $total_packages Total number of shipping packages.
 		 * @return string Shipping package name.
 		 */
 		return apply_filters(
 			'woocommerce_shipping_package_name',
-			sprintf(
-				/* translators: %d: shipping package number */
-				_x( 'Shipment %d', 'shipping packages', 'woocommerce' ),
-				$index
-			),
+			$shipping_package_name,
 			$package['package_id'],
-			$package
+			$package,
+			$total_packages
 		);
 	}

diff --git a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Utilities/CartControllerTests.php b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Utilities/CartControllerTests.php
index 6d90ea2bd9d..c17e9b32986 100644
--- a/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Utilities/CartControllerTests.php
+++ b/plugins/woocommerce/tests/php/src/Blocks/StoreApi/Utilities/CartControllerTests.php
@@ -190,11 +190,11 @@ class CartControllerTests extends TestCase {

 		$packages = $class->get_shipping_packages( false );

-		$this->assertNotEmpty( $packages, 'Should have at least one shipping package.' );
+		$this->assertCount( 1, $packages, 'Should have one shipping package.' );
 		$this->assertArrayHasKey( 'package_id', $packages[0], 'Package should have package_id.' );
 		$this->assertArrayHasKey( 'package_name', $packages[0], 'Package should have package_name.' );
 		$this->assertEquals( 0, $packages[0]['package_id'], 'First package should have package_id of 0 (array key).' );
-		$this->assertStringContainsString( 'Shipment 1', $packages[0]['package_name'], 'First package should have package_name containing "Shipment 1".' );
+		$this->assertSame( 'Shipment', $packages[0]['package_name'], 'Single package should have package_name of "Shipment".' );
 	}

 	/**