From d87c3d38d72c12469f1bf9c35364d77076a93e66 Mon Sep 17 00:00:00 2001 From: Mike Jolley Date: Wed, 11 Sep 2024 16:25:20 +0100 Subject: [PATCH] Performance: Move collectableMethodIds to cart/checkout block assets rather than loading it sitewide (#51174) * Move collectableMethodIds to cart/checkout block assets * changelog --- .../changelog/fix-improve-local-pickup-id-settings | 4 ++++ plugins/woocommerce/src/Blocks/BlockTypes/Cart.php | 4 ++++ plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php | 7 +++++-- .../woocommerce/src/Blocks/Shipping/ShippingController.php | 2 -- 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-improve-local-pickup-id-settings diff --git a/plugins/woocommerce/changelog/fix-improve-local-pickup-id-settings b/plugins/woocommerce/changelog/fix-improve-local-pickup-id-settings new file mode 100644 index 00000000000..4315888d20c --- /dev/null +++ b/plugins/woocommerce/changelog/fix-improve-local-pickup-id-settings @@ -0,0 +1,4 @@ +Significance: minor +Type: performance + +Only load local pickup methods on cart/checkout pages diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php b/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php index 11f8bdb2d26..ffc73228bc1 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php @@ -245,8 +245,12 @@ class Cart extends AbstractBlock { $this->asset_data_registry->add( 'hasDarkEditorStyleSupport', current_theme_supports( 'dark-editor-style' ) ); $this->asset_data_registry->register_page_id( isset( $attributes['checkoutPageId'] ) ? $attributes['checkoutPageId'] : 0 ); $this->asset_data_registry->add( 'isBlockTheme', wc_current_theme_is_fse_theme() ); + $pickup_location_settings = LocalPickupUtils::get_local_pickup_settings(); + $local_pickup_method_ids = LocalPickupUtils::get_local_pickup_method_ids(); + $this->asset_data_registry->add( 'localPickupEnabled', $pickup_location_settings['enabled'] ); + $this->asset_data_registry->add( 'collectableMethodIds', $local_pickup_method_ids ); // Hydrate the following data depending on admin or frontend context. if ( ! is_admin() && ! WC()->is_rest_api_request() ) { diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php b/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php index 60737382791..211b57c63eb 100644 --- a/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php +++ b/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php @@ -370,8 +370,11 @@ class Checkout extends AbstractBlock { $this->asset_data_registry->add( 'isBlockTheme', wc_current_theme_is_fse_theme() ); $pickup_location_settings = LocalPickupUtils::get_local_pickup_settings(); + $local_pickup_method_ids = LocalPickupUtils::get_local_pickup_method_ids(); + $this->asset_data_registry->add( 'localPickupEnabled', $pickup_location_settings['enabled'] ); $this->asset_data_registry->add( 'localPickupText', $pickup_location_settings['title'] ); + $this->asset_data_registry->add( 'collectableMethodIds', $local_pickup_method_ids ); $is_block_editor = $this->is_block_editor(); @@ -385,8 +388,8 @@ class Checkout extends AbstractBlock { $shipping_methods = WC()->shipping()->get_shipping_methods(); $formatted_shipping_methods = array_reduce( $shipping_methods, - function ( $acc, $method ) { - if ( in_array( $method->id, LocalPickupUtils::get_local_pickup_method_ids(), true ) ) { + function ( $acc, $method ) use ( $local_pickup_method_ids ) { + if ( in_array( $method->id, $local_pickup_method_ids, true ) ) { return $acc; } if ( $method->supports( 'settings' ) ) { diff --git a/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php b/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php index 219ca8abe4c..418fedab766 100644 --- a/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php +++ b/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php @@ -60,8 +60,6 @@ class ShippingController { } ); } - - $this->asset_data_registry->add( 'collectableMethodIds', array( 'Automattic\WooCommerce\StoreApi\Utilities\LocalPickupUtils', 'get_local_pickup_method_ids' ) ); $this->asset_data_registry->add( 'shippingCostRequiresAddress', get_option( 'woocommerce_shipping_cost_requires_address', false ) === 'yes' ); add_action( 'rest_api_init', array( $this, 'register_settings' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );