Commit e258712536 for woocommerce

commit e258712536b9ca1bea1cd9bc845b7e13d787077f
Author: Seun Olorunsola <30554163+triple0t@users.noreply.github.com>
Date:   Wed Feb 11 08:23:37 2026 +0100

    Add filters for validated email settings in V4 Emails REST API (#63170)

    * Add filters for validated email settings in REST API

    * Introduce filters to allow customization of validated email settings in the REST API.

    - Add a filter for validated settings before updating in Email Controller.
    - Add a filter for validated settings after validation and sanitization in EmailsSettingsSchema.
    - Ensure proper error handling for both filters.

    This enhancement allows developers to modify the settings validation process, improving flexibility and customization options for email settings management.

    * Add changelog file

    * PR feedback update

diff --git a/plugins/woocommerce/changelog/stomail-7686-users-can-set-from-address-to-match-any-domain b/plugins/woocommerce/changelog/stomail-7686-users-can-set-from-address-to-match-any-domain
new file mode 100644
index 0000000000..f38bf2fbcc
--- /dev/null
+++ b/plugins/woocommerce/changelog/stomail-7686-users-can-set-from-address-to-match-any-domain
@@ -0,0 +1,4 @@
+Significance: patch
+Type: add
+
+Add filters `woocommerce_emails_api_settings_schema_validate_and_sanitize_settings` and `woocommerce_emails_settings_schema_validate_and_sanitize_settings` to allow customization of email settings validation in the REST API.
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Email/Controller.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Email/Controller.php
index 4c7febe073..2b6321c27e 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Email/Controller.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Email/Controller.php
@@ -213,6 +213,28 @@ class Controller extends AbstractController {
 			$reply_to_enabled = wc_bool_to_string( $values_to_update['woocommerce_email_reply_to_enabled'] );
 		}

+		/**
+		 * Filters the values to update before validation and sanitization.
+		 *
+		 * @param array $values_to_update Values to update.
+		 * @param array $settings_by_id Settings by ID.
+		 * @return array Values to update.
+		 * @since 10.6.0
+		 */
+		$values_to_update = apply_filters( 'woocommerce_emails_api_settings_schema_validate_and_sanitize_settings', $values_to_update, $settings_by_id );
+
+		if ( is_wp_error( $values_to_update ) ) {
+			return $values_to_update;
+		}
+
+		if ( ! is_array( $values_to_update ) ) {
+			return new WP_Error(
+				'rest_invalid_filter_result',
+				__( 'Invalid result from filter.', 'woocommerce' ),
+				array( 'status' => 500 )
+			);
+		}
+
 		// Process each setting in the payload.
 		foreach ( $values_to_update as $setting_id => $setting_value ) {
 			// Sanitize the setting ID.
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Emails/Schema/EmailsSettingsSchema.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Emails/Schema/EmailsSettingsSchema.php
index d0a4cf7075..b3ca15b55c 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Emails/Schema/EmailsSettingsSchema.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Emails/Schema/EmailsSettingsSchema.php
@@ -491,6 +491,28 @@ class EmailsSettingsSchema extends AbstractSchema {
 			$validated[ $field_id ] = $sanitized;
 		}

+		/**
+		 * Filters the validated settings after validation and sanitization.
+		 *
+		 * @param array $validated Validated settings.
+		 * @param WC_Email $email Email instance.
+		 * @param array $values Values to validate and sanitize.
+		 * @return array Validated settings.
+		 * @since 10.6.0
+		 */
+		$validated = apply_filters( 'woocommerce_emails_settings_schema_validate_and_sanitize_settings', $validated, $email, $values );
+		if ( is_wp_error( $validated ) ) {
+			return $validated;
+		}
+
+		if ( ! is_array( $validated ) ) {
+			return new WP_Error(
+				'rest_invalid_filter_result',
+				__( 'Invalid result from filter.', 'woocommerce' ),
+				array( 'status' => 500 )
+			);
+		}
+
 		return $validated;
 	}