WC_REST_Email_Settings_V4_Controller::update_itempublicWC 1.0

Update email settings.

Method of the class: WC_REST_Email_Settings_V4_Controller{}

No Hooks.

Returns

WP_REST_Response|WP_Error.

Usage

$WC_REST_Email_Settings_V4_Controller = new WC_REST_Email_Settings_V4_Controller();
$WC_REST_Email_Settings_V4_Controller->update_item( $request );
$request(WP_REST_Request) (required)
Full details about the request.

WC_REST_Email_Settings_V4_Controller::update_item() code WC 10.3.6

public function update_item( $request ) {
	$updated_settings = array();

	// Get all parameters from the request body.
	$params = $request->get_json_params();

	if ( ! is_array( $params ) || empty( $params ) ) {
		return new WP_Error(
			'rest_invalid_param',
			__( 'Invalid or empty request body.', 'woocommerce' ),
			array( 'status' => 400 )
		);
	}

	// Handle nested values structure - extract values if they exist.
	$settings_data = isset( $params['values'] ) && is_array( $params['values'] ) ? $params['values'] : $params;

	// Define valid email settings.
	$valid_settings     = array( 'woocommerce_email_from_name', 'woocommerce_email_from_address', 'woocommerce_email_reply_to_enabled', 'woocommerce_email_reply_to_name', 'woocommerce_email_reply_to_address' );
	$validated_settings = array();

	$reply_to_enabled = get_option( 'woocommerce_email_reply_to_enabled', 'no' );
	if ( isset( $settings_data['woocommerce_email_reply_to_enabled'] ) ) {
		$reply_to_enabled = $this->sanitize_setting_value( 'woocommerce_email_reply_to_enabled', $settings_data['woocommerce_email_reply_to_enabled'] );
	}

	// Process each setting in the payload.
	foreach ( $settings_data as $setting_id => $setting_value ) {
		// Sanitize the setting ID.
		$setting_id = sanitize_text_field( $setting_id );

		// Security check: only allow updating valid email settings.
		if ( ! in_array( $setting_id, $valid_settings, true ) ) {
			continue;
		}

		// Sanitize and validate the value.
		$sanitized_value   = $this->sanitize_setting_value( $setting_id, $setting_value );
		$validation_result = $this->validate_setting_value( $setting_id, $sanitized_value, $reply_to_enabled );

		if ( is_wp_error( $validation_result ) ) {
			return $validation_result;
		}

		// Store validated values first.
		$validated_settings[ $setting_id ] = $sanitized_value;
	}

	// After validation loop, update all settings.
	foreach ( $validated_settings as $setting_id => $value ) {
		$update_result = update_option( $setting_id, $value );
		if ( $update_result ) {
			$updated_settings[] = $setting_id;
		}
	}

	// Return updated settings.
	$response_data = $this->get_email_settings_data();
	return rest_ensure_response( $response_data );
}