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".' );
}
/**