add_settings_error()
Реєструє повідомлення про перевірку опції, щоб пізніше показати це повідомлення користувачу. Зазвичай таке повідомлення – це помилка перевірки даних.
Функція є частиною API налаштувань .
Використовуйте, щоб вивести повідомлення користувачу, що перевірка значення опції не була пройдена, наприклад, при: помилки перевірки поля або якщо не заповнене обов’язкове поле і т.д.
За промовчанням повідомлення автоматично відображаються для всіх підсторінок у розділі “Параметри”. Але якщо зміни опцій виводяться на інших сторінках, які реєструються функціями: add_submenu_page() , то повідомлення про оновлення опцій або помилку не будуть показані автоматично.
Щоб їх показати, потрібно просто додати код виведення сторінки налаштувань функцію settings_errors() , зазвичай її потрібно додавати відразу після виведення заголовка сторінки:
<h2>Заголовок сторінки налаштувань</h2> <?php settings_errors(); ?>
add_settings_error() зазвичай використовується всередині функції перевірки значень опції: див. параметр $sanitize_callback в register_setting() .
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
add_settings_error( $setting, $code, $message, $type );
-
$setting
(рядок) (обов’язковий) -
Назва опції, до якої належить поточна помилка. Ідентифікатор, який повинен збігатися з параметром $setting
settings_errors( $setting )
або
get_settings_errors( $setting )
. -
$code
(рядок) (обов’язковий) -
Ідентифікатор, назва помилки. Використовується як частина id атрибут HTML тега. Префікс
setting-error-
буде доданий до назви та id атрибуту тега , що обертає повідомлення html
<div id="">
. -
$message
(рядок) (обов’язковий) -
Відформатований текст повідомлення на екрані. Текст буде обернутий на
<div>
теги
<p>
. -
$type
(рядок) -
Якого типу це повідомлення:
error
або
updated
. Вказане тут значення буде додано до класу тега, що обертає
<div>
. Щоб вказати кілька класів розділіть їх комами.
За замовчуванням: ‘error’
Приклади
#1 Збереження значення опції або виведення повідомлення про помилку
Припустимо, що ми зареєстрували опцію функцією register_setting() , в параметрі $sanitize_callback вказали функцію перевірки: sanitize_opt() .
Нижче приклад цієї функції, в якій реєструється повідомлення про перевірку та збереження значення опції:
function sanitize_opt( $value ) { $option_name = 'my_option'; // Назва опції $message = 'Дані успішно оновлені.'; $type = 'updated'; if( empty($value) ) { $type = 'error'; $message = 'Поле хххх не може бути порожнім'; } if( is_numeric($value) ){ $type = 'error'; $message = 'Поле хххх не може бути числом'; } // Очистимо опцію $ Value = sanitize_text_field ($ Value); add_settings_error( $option_name, 'settings_updated', $message, $type ); if( $type === 'error' ) return get_option ($ option_name); else return $value; }
Функція перевірки sanitize_opt() повинна завжди повертати значення опції для збереження його в БД і WordPress сам збереже значення, що повернулося в опцію. Але що робити, якщо перевірка деяких опцій не була пройдена і потрібно зареєструвати помилку, щоб побачив її користувач, але не потрібно оновлювати значення опції в БД? У цьому випадку функція sanitize_opt() повинна повернути оригінальне значення опції. Справа в тому, що скасувати роботу оновлення опції ніяк не вийде, тому щоб не оновлювати опцію, ми можемо повернути вихідне значення опції, такий свого роду хак, який дозволяє досягти потрібного результату.
#2 Реєстрація помилок під час перевірки значень опції
Припустимо, ми створили сторінку налаштувань з двома полями форми: input і checkbox (дивіться другий приклад на сторінці API налаштувань ). Тепер нам потрібно перевірити значення цих полів і якщо вони не відповідають нормам, зареєструвати помилки, які WordPress при збереженні виведе автоматично:
/** * функція перевірки значень опцій та реєстрації помилок, якщо потрібно! * передбачається що ми реєстрували опцію так: * register_setting( 'primer_group', 'primer_option', 'primer_options_check'); */ function primer_options_check( $data ) { $option_name = 'my_option'; // Назва опції // перевіряємо поле input $message = $type = null; if ( empty( $data['input'] ) ) { $type = 'error'; $message = 'Поле "Назва опції" не може бути порожнім'; } elseif( preg_match( '~[0-9]~', $data['input'] ) ){ $ data['input'] = null; $type = 'error'; $message = 'Поле "Назва опції" не може містити цифри'; } if( $message ){ add_settings_error( 'primer_input', 'input', $message, $type ); } // перевіряємо поле checkbox $message = $type = null; if( empty( $data['checkbox'] ) ){ $type = 'error'; $message = 'Чекбокс слід зазначити!'; } if( $message ){ add_settings_error( 'primer_checkbox', 'checkbox', $message, $type ); } if( $type === 'error' ) return get_option ($ option_name); else return $data; }
нотатки
- Global. Масив. $wp_settings_errors Storage array of errors затриманий протягом цієї pageload
список змін
З версії 3.0.0 | Введено. |
З версії 5.3.0 | Added warning and info як можливі значення для $type . |
add settings error WP 6.0.2
function add_settings_error( $setting, $code, $message, $type = 'error' ) { global $wp_settings_errors; $wp_settings_errors[] = array( 'setting' => $setting, 'code' => $code, 'message' => $message, 'type' => $type, ); }