Функция add_settings_error() является частью API настроек WordPress и предназначена для вывода сообщений пользователям о проверке настроек, ошибках валидации данных и других проблемах. Она позволяет легко регистрировать сообщения об ошибках или успешных действиях при работе с настройками.
add_settings_error( string $setting, string $code, string $message, string $type = 'error' )
Описание
Функция используется для регистрации сообщений об ошибках или успешных действиях при работе с настройками. Сообщения могут выводиться, например, при ошибках валидации формы или успешном обновлении настроек. Обычно вызывается в функции обратной валидации (санитизации), переданной в параметре $sanitize_callback функции register_setting().
- $setting — строка, название опции, к которой относится ошибка.
- $code — строка, идентификатор ошибки (используется в HTML как часть атрибута id).
- $message — строка, сообщение для отображения пользователю.
- $type — строка, тип сообщения (например, error,updated,success,warning).
Возвращаемое значение
- null— функция не возвращает значений.
Когда использовать add_settings_error()
- При проверке значений опций — если в процессе валидации настроек обнаружена ошибка, вы можете зарегистрировать ее с помощью этой функции, чтобы пользователи видели сообщение.
- Для успешных действий — помимо ошибок, функция может выводить и успешные уведомления, используя параметр $type = 'updated'или другие варианты.
Пример 1: Вывод сообщения об ошибке валидации опции
Предположим, у нас есть настройка с именем my_custom_option, и нам нужно убедиться, что она не пуста. Если поле пустое, выводим ошибку.
function validate_my_custom_option( $value ) {
    $option_name = 'my_custom_option';
    
    if ( empty( $value ) ) {
        // Регистрация ошибки
        add_settings_error(
            $option_name,            // Опция, к которой относится ошибка
            'empty_option',          // Идентификатор ошибки
            'Значение не может быть пустым!',  // Сообщение об ошибке
            'error'                  // Тип сообщения
        );
        return get_option( $option_name );  // Возвращаем текущее значение, чтобы не сохранить пустое поле
    }
    
    // Если валидация успешна, возвращаем значение
    return sanitize_text_field( $value );
}
В этом примере функция validate_my_custom_option() проверяет, пустое ли значение опции, и, если да, регистрирует сообщение об ошибке. Сообщение будет отображаться на странице настроек.
Пример 2: Вывод сообщения об успешном сохранении
Вы можете использовать add_settings_error() не только для ошибок, но и для уведомлений о том, что данные были успешно сохранены. Например:
function validate_and_save_option( $value ) {
    $option_name = 'my_custom_setting';
    
    // Проверим значение
    if ( strlen( $value ) < 5 ) {
        add_settings_error( 
            $option_name, 
            'value_too_short', 
            'Значение слишком короткое. Введите не менее 5 символов.', 
            'error' 
        );
        return get_option( $option_name ); // Возвращаем текущее значение
    }
    // Если все хорошо, сохраняем и выводим сообщение об успехе
    add_settings_error(
        $option_name, 
        'settings_saved', 
        'Настройки успешно сохранены!', 
        'updated'
    );
    
    return sanitize_text_field( $value );
}
Здесь, если значение прошло проверку, выводится сообщение об успешном сохранении настроек.
Пример 3: Проверка нескольких полей и регистрация ошибок
Допустим, на странице настроек есть несколько полей, и вам нужно проверить значения всех полей и зарегистрировать ошибки для каждого из них.
function validate_multiple_options( $options ) {
    // Проверим текстовое поле
    if ( empty( $options['text_field'] ) ) {
        add_settings_error(
            'text_field', 
            'empty_text', 
            'Текстовое поле не может быть пустым.', 
            'error'
        );
    }
    // Проверим, отмечен ли чекбокс
    if ( ! isset( $options['checkbox_field'] ) ) {
        add_settings_error(
            'checkbox_field', 
            'checkbox_not_checked', 
            'Необходимо отметить чекбокс.', 
            'error'
        );
    }
    // Если были ошибки, возвращаем текущие значения опций
    if ( get_settings_errors() ) {
        return get_option( 'my_options_group' );
    }
    // Если все успешно, возвращаем очищенные данные
    return array_map( 'sanitize_text_field', $options );
}
Этот пример показывает, как можно проверять несколько полей формы и регистрировать разные сообщения об ошибках.
Вывод ошибок на странице
Для отображения сообщений об ошибках и успехах на странице настроек необходимо использовать функцию settings_errors().
function render_settings_page() {
    echo '<h1>Мои настройки</h1>';
    
    // Выводим сообщения об ошибках и успехах
    settings_errors();
    
    // Остальной HTML-код формы настроек
}
Функция settings_errors() выводит все зарегистрированные ошибки и уведомления.
Заключение
Функция add_settings_error() — это мощный инструмент для улучшения взаимодействия с пользователями при работе с настройками в WordPress. Она позволяет регистрировать ошибки и уведомления о проверке данных, делая интерфейс настроек более удобным и понятным.
