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;
}