diff --git a/includes/data-stores/class-wc-shipping-zone-data-store.php b/includes/data-stores/class-wc-shipping-zone-data-store.php index 453ec877f15..fe9c54d2159 100644 --- a/includes/data-stores/class-wc-shipping-zone-data-store.php +++ b/includes/data-stores/class-wc-shipping-zone-data-store.php @@ -74,33 +74,41 @@ class WC_Shipping_Zone_Data_Store extends WC_Data_Store_WP implements WC_Shippin public function read( &$zone ) { global $wpdb; - $zone_data = false; - - if ( 0 !== $zone->get_id() || '0' !== $zone->get_id() ) { - $zone_data = $wpdb->get_row( - $wpdb->prepare( - "SELECT zone_name, zone_order FROM {$wpdb->prefix}woocommerce_shipping_zones WHERE zone_id = %d LIMIT 1", - $zone->get_id() - ) - ); - } - + // Zone 0 is used as a default if no other zones fit. if ( 0 === $zone->get_id() || '0' === $zone->get_id() ) { $this->read_zone_locations( $zone ); $zone->set_zone_name( __( 'Locations not covered by your other zones', 'woocommerce' ) ); $zone->read_meta_data(); $zone->set_object_read( true ); + + /** + * Indicate that the WooCommerce shipping zone has been loaded. + * + * @param WC_Shipping_Zone $zone The shipping zone that has been loaded. + */ do_action( 'woocommerce_shipping_zone_loaded', $zone ); - } elseif ( $zone_data ) { - $zone->set_zone_name( $zone_data->zone_name ); - $zone->set_zone_order( $zone_data->zone_order ); - $this->read_zone_locations( $zone ); - $zone->read_meta_data(); - $zone->set_object_read( true ); - do_action( 'woocommerce_shipping_zone_loaded', $zone ); - } else { + return; + } + + $zone_data = $wpdb->get_row( + $wpdb->prepare( + "SELECT zone_name, zone_order FROM {$wpdb->prefix}woocommerce_shipping_zones WHERE zone_id = %d LIMIT 1", + $zone->get_id() + ) + ); + + if ( ! $zone_data ) { throw new Exception( __( 'Invalid data store.', 'woocommerce' ) ); } + + $zone->set_zone_name( $zone_data->zone_name ); + $zone->set_zone_order( $zone_data->zone_order ); + $this->read_zone_locations( $zone ); + $zone->read_meta_data(); + $zone->set_object_read( true ); + + /** This action is documented in includes/datastores/class-wc-shipping-zone-data-store.php. */ + do_action( 'woocommerce_shipping_zone_loaded', $zone ); } /**