+
get_param( 'instance_id' );
$enabled = $request->get_param( 'enabled' );
+ // Convert to boolean (handles both bool and string "true"/"false")
+ $enabled = filter_var( $enabled, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE );
+
+ if ( $enabled === null ) {
+ return new WP_REST_Response(
+ array(
+ 'error' => 'invalid_enabled_value',
+ 'message' => __( 'The "enabled" parameter must be a boolean', 'woonoow' ),
+ ),
+ 400
+ );
+ }
+
// Get the zone
$zone = \WC_Shipping_Zones::get_zone( $zone_id );
if ( ! $zone ) {
@@ -204,16 +217,34 @@ class ShippingController extends WP_REST_Controller {
// Get all shipping methods for this zone
$shipping_methods = $zone->get_shipping_methods();
$method_found = false;
+ $option_key = '';
foreach ( $shipping_methods as $method ) {
if ( $method->instance_id == $instance_id ) {
$method_found = true;
-
- // Update the enabled status
- $settings = get_option( $method->get_instance_option_key(), array() );
- $settings['enabled'] = $enabled ? 'yes' : 'no';
- update_option( $method->get_instance_option_key(), $settings );
-
+ $option_key = $method->get_instance_option_key();
+
+ // Debug logging
+ error_log( sprintf( '[WooNooW] Toggling shipping method %s (instance %d) to %s', $method->id, $instance_id, $enabled ? 'enabled' : 'disabled' ) );
+
+ // Get current settings and merge with new enabled status
+ $method->init_instance_settings();
+ $current_settings = $method->instance_settings;
+ $new_settings = array_merge( $current_settings, array( 'enabled' => $enabled ? 'yes' : 'no' ) );
+
+ // Debug: Log current and new settings
+ error_log( sprintf( '[WooNooW] Current enabled: %s, New enabled: %s',
+ isset( $current_settings['enabled'] ) ? $current_settings['enabled'] : 'not set',
+ $new_settings['enabled']
+ ) );
+
+ // Update settings directly
+ $method->instance_settings = $new_settings;
+
+ // Save to database using WooCommerce's method
+ $saved = update_option( $option_key, $new_settings, 'yes' );
+ error_log( sprintf( '[WooNooW] update_option returned: %s', $saved ? 'true' : 'false' ) );
+
break;
}
}
@@ -230,6 +261,7 @@ class ShippingController extends WP_REST_Controller {
// Clear shipping cache
\WC_Cache_Helper::get_transient_version( 'shipping', true );
+ wp_cache_flush();
return new WP_REST_Response(
array(
@@ -242,6 +274,7 @@ class ShippingController extends WP_REST_Controller {
);
} catch ( \Exception $e ) {
+ error_log( sprintf( '[WooNooW] Toggle exception: %s', $e->getMessage() ) );
return new WP_REST_Response(
array(
'error' => 'toggle_failed',