WC_REST_Email_Settings_V4_Controller::update_item
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() 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 );
}