Commit 21ce24caed for woocommerce

commit 21ce24caedc179a42e29fdfa1683c85557a1d43f
Author: Abdalsalaam Halawa <abdalsalaamnafez@gmail.com>
Date:   Mon Nov 24 19:25:45 2025 +0400

    Fix fatal error in needs_shipping() when order contains deleted product (#61628)

    * Fix fatal error in needs_shipping() when order contains deleted product

    * add changelog

    * test_needs_shipping() test deleted product

    * Add changefile(s) from automation for the following project(s): woocommerce

    * remove manually added changelog

    ---------

    Co-authored-by: github-actions <github-actions@github.com>
    Co-authored-by: Sam Najian <dev@najian.info>

diff --git a/plugins/woocommerce/changelog/61628-fix-issue-61627 b/plugins/woocommerce/changelog/61628-fix-issue-61627
new file mode 100644
index 0000000000..ce099dc684
--- /dev/null
+++ b/plugins/woocommerce/changelog/61628-fix-issue-61627
@@ -0,0 +1,4 @@
+Significance: minor
+Type: fix
+
+Fix fatal error in needs_shipping() when order contains permanently deleted product
\ No newline at end of file
diff --git a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
index 74b6b6d32c..e22b238c82 100644
--- a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
+++ b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
@@ -2469,7 +2469,12 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
 		$needs_shipping = false;

 		foreach ( $this->get_items() as $item ) {
-			if ( is_a( $item, 'WC_Order_Item_Product' ) && $item->get_product()->needs_shipping() ) {
+			if ( ! is_a( $item, 'WC_Order_Item_Product' ) ) {
+				continue;
+			}
+
+			$product = $item->get_product();
+			if ( is_a( $product, 'WC_Product' ) && $product->needs_shipping() ) {
 				$needs_shipping = true;
 				break;
 			}
diff --git a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php
index b9cdb67575..2613e5b7d9 100644
--- a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php
+++ b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php
@@ -908,6 +908,11 @@ class WC_Tests_CRUD_Orders extends WC_Unit_Test_Case {
 		$object->save();

 		$this->assertTrue( $object->needs_shipping() );
+
+		$physical_product->delete( true );
+		// Reload the order to ensure fresh data.
+		$object = wc_get_order( $object->get_id() );
+		$this->assertFalse( $object->needs_shipping() );
 	}

 	/**