diff --git a/plugins/woocommerce/changelog/BL-prevent-non-orders-on-order-received-page b/plugins/woocommerce/changelog/BL-prevent-non-orders-on-order-received-page new file mode 100644 index 0000000000000..7e40a6cee1535 --- /dev/null +++ b/plugins/woocommerce/changelog/BL-prevent-non-orders-on-order-received-page @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Avoid a fatal error on the order received page if the order ID is not for a valid order. diff --git a/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php b/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php index 1915c580ffc03..40b94331095d6 100644 --- a/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php +++ b/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php @@ -271,7 +271,7 @@ private static function order_received( $order_id = 0 ) { if ( $order_id > 0 ) { $order = wc_get_order( $order_id ); - if ( ! $order || ! hash_equals( $order->get_order_key(), $order_key ) ) { + if ( ( ! $order instanceof WC_Order ) || ! hash_equals( $order->get_order_key(), $order_key ) ) { $order = false; } } diff --git a/plugins/woocommerce/includes/wc-cart-functions.php b/plugins/woocommerce/includes/wc-cart-functions.php index 94fba81e7fd9b..9c883491d40d1 100644 --- a/plugins/woocommerce/includes/wc-cart-functions.php +++ b/plugins/woocommerce/includes/wc-cart-functions.php @@ -176,7 +176,7 @@ function wc_clear_cart_after_payment() { if ( $order_id > 0 ) { $order = wc_get_order( $order_id ); - if ( $order && hash_equals( $order->get_order_key(), $order_key ) ) { + if ( $order instanceof WC_Order && hash_equals( $order->get_order_key(), $order_key ) ) { WC()->cart->empty_cart(); } } @@ -185,7 +185,7 @@ function wc_clear_cart_after_payment() { if ( WC()->session->order_awaiting_payment > 0 ) { $order = wc_get_order( WC()->session->order_awaiting_payment ); - if ( $order && $order->get_id() > 0 ) { + if ( $order instanceof WC_Order && $order->get_id() > 0 ) { // If the order has not failed, or is not pending, the order must have gone through. if ( ! $order->has_status( array( 'failed', 'pending', 'cancelled' ) ) ) { WC()->cart->empty_cart();