From 58867bc328c2cad40f2cfa8b5cdb34347fc42a98 Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Wed, 5 Feb 2020 13:45:09 -0800 Subject: [PATCH] Check for instance of WooCommerce and WP_Error before initializing session and cart in `rest_authentication_errors` callback. (https://github.com/woocommerce/woocommerce-blocks/pull/1698) * check for instance of WooCommerce before initializing session and cart * fix invalid filter usage and include WP_Error check * check for existence of instance method rather than WC instance itself --- plugins/woocommerce-blocks/src/RestApi.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/woocommerce-blocks/src/RestApi.php b/plugins/woocommerce-blocks/src/RestApi.php index 1b1becbadea..fbc0094f561 100644 --- a/plugins/woocommerce-blocks/src/RestApi.php +++ b/plugins/woocommerce-blocks/src/RestApi.php @@ -19,7 +19,7 @@ class RestApi { */ public static function init() { add_action( 'rest_api_init', array( __CLASS__, 'register_rest_routes' ), 10 ); - add_filter( 'rest_authentication_errors', array( __CLASS__, 'maybe_init_cart_session' ), 1, 2 ); + add_filter( 'rest_authentication_errors', array( __CLASS__, 'maybe_init_cart_session' ), 1 ); } /** @@ -61,19 +61,19 @@ class RestApi { * * @todo check compat < WC 3.6. Make specific to cart endpoint. * @param mixed $return Value being filtered. - * @param array $request Request data. * @return mixed */ - public static function maybe_init_cart_session( $return, $request = false ) { - // Pass through other errors. - if ( ! empty( $error ) ) { - return $error; + public static function maybe_init_cart_session( $return ) { + $wc_instance = wc(); + // if WooCommerce instance isn't available or already have an + // authentication error, just return. + if ( ! method_exists( $wc_instance, 'initialize_session' ) || \is_wp_error( $return ) ) { + return $return; } - - wc()->frontend_includes(); - wc()->initialize_session(); - wc()->initialize_cart(); - wc()->cart->get_cart(); + $wc_instance->frontend_includes(); + $wc_instance->initialize_session(); + $wc_instance->initialize_cart(); + $wc_instance->cart->get_cart(); return $return; }