Commit 1ed6d18bdf0 for woocommerce
commit 1ed6d18bdf055045db0e1cb131b5084ef04e43e3
Author: Mike Jolley <mike.jolley@me.com>
Date: Fri Apr 24 14:07:31 2026 +0100
Fix fatal error in cart template when filter returns non-product (#64252)
* Fix fatal error in cart template when product filter returns non-product
* Add changelog entry for cart template null-product fix
diff --git a/plugins/woocommerce/changelog/wooplug-6544-cart-template-null-product b/plugins/woocommerce/changelog/wooplug-6544-cart-template-null-product
new file mode 100644
index 00000000000..a997e38d35b
--- /dev/null
+++ b/plugins/woocommerce/changelog/wooplug-6544-cart-template-null-product
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Prevent a fatal error in the cart template when a filter on `woocommerce_cart_item_product` returns a non-product value, by moving the product name lookup inside the existing product validity check.
diff --git a/plugins/woocommerce/templates/cart/cart.php b/plugins/woocommerce/templates/cart/cart.php
index 2756ba0f837..8d576beca68 100644
--- a/plugins/woocommerce/templates/cart/cart.php
+++ b/plugins/woocommerce/templates/cart/cart.php
@@ -12,7 +12,7 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
- * @version 10.1.0
+ * @version 10.8.0
*/
defined( 'ABSPATH' ) || exit;
@@ -40,17 +40,27 @@ do_action( 'woocommerce_before_cart' ); ?>
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
+
/**
- * Filter the product name.
+ * Filter whether this cart item is visible in the cart.
*
* @since 2.1.0
- * @param string $product_name Name of the product in the cart.
- * @param array $cart_item The product in the cart.
- * @param string $cart_item_key Key for the product in the cart.
+ * @param bool $visible Whether the cart item is visible. Default true.
+ * @param array $cart_item The cart item data.
+ * @param string $cart_item_key The cart item key.
*/
- $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key );
-
- if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
+ $visible = apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key );
+
+ if ( $_product instanceof WC_Product && $_product->exists() && $cart_item['quantity'] > 0 && $visible ) {
+ /**
+ * Filter the product name.
+ *
+ * @since 2.1.0
+ * @param string $product_name Name of the product in the cart.
+ * @param array $cart_item The product in the cart.
+ * @param string $cart_item_key Key for the product in the cart.
+ */
+ $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key );
$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key );
?>
<tr class="woocommerce-cart-form__cart-item <?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">