WP_Error{}
Клас, завдання якого спростити обробку помилок (повідомлень) під час роботи з WordPress (створення плагінів, тем). Цей клас використовується для обробки помилок самим WordPress.
Для того, щоб розпочати роботу з класом, потрібно створити його екземпляр, а потім додавати або видаляти в нього помилки (повідомлення). Цей клас зручно використовувати не тільки для обробки помилок, але й для обробки простих повідомлень, наприклад: “Налаштування збережено”. Щоб перевірити, чи є будь-яка змінна PHP екземпляром класу WP_Error в WordPress є спеціальна функція is_wp_error() .
У параметрі $data (дані помилки) зазвичай записується опис помилки, де можна вказати як саме вирішити проблему. $message і $data це рядки і загалом вони схожі, але розробляться логікою: $message – повідомлення користувача і $data – повідомлення розробника.
Хуки із класу
Повертає
Нічого не вертає. Створює об’єкт.
Використання
// Пряме використання return new WP_Error( $code, $message, $data ); // додавання кількох помилок $errors = новий WP_Error; $errors->add( $code, $message, $data ); $errors->add( $code, $message, $data );
-
$code
(рядок/число) (обов’язковий) - Код помилки. Якщо вказати однакові коди для різних помилок, ці помилки будуть згруповані за цим кодом. Тобто. потім можна буде отримати всі помилки, що мають вказаний код.
-
$message
(рядок) (обов’язковий) - Повідомлення помилки.
-
$data
(різне) Будь-які додаткові дані. Отримати ці дані можна буде пізніше за кодом. Дивіться методи
За замовчуванням: ”
Приклади
#1 Виклик як функцію
$error = new WP_Error( 'error_key', 'Повідомлення помилки...', 404); if( is_wp_error( $error ) ){ echo $error->get_error_code(); //> error_key echo $error->get_error_message(); //> Повідомлення помилки... echo $error->get_error_data(); //> 404 }
Коли функція повертає створений у ній екземпляр WP_Error, який перевіряється функцією is_wp_error() . За таким принципом, наприклад, працює функція WordPress wp_insert_post() – у разі помилки вона повертає об’єкт WP_Error , в якому міститься інформація про помилку(ах). Коротко такий підхід можна записати так:
function some_stuff( $some = false ){ // Змінна $some має бути вказана if( ! $some ) return new WP_Error('fallen', 'Він упав і стати не може'); else return true; } // тепер викликаємо функцію, щоб вона повернула помилку $ return = some_stuff(); // перевіряємо змінну наявність помилки if( is_wp_error( $return ) ){ // Виводимо повідомлення помилки echo $return->get_error_message(); // виведе 'Він упав і стати не може' }
У третьому параметрі $data можна передати будь-які дані. Але якщо помилка пов’язана із запитом, то WordPress у цьому параметрі прийнято передавати статус код відповіді. Наприклад, дивіться код функції wp_handle_comment_submission()
#2 Робота з об’єктом
Коли ми створюємо змінну з екземпляром класу WP_Error і потім працюємо з цією змінною, можна в іншому класі або іншій функції, групі функцій, де завгодно.
Наприклад, ми робимо форму зворотного зв’язку і нам потрібно обробляти помилки, у цьому випадку добре підійде екземпляр класу WP_Error . Наведу приклад створення екземпляра та додавання до нього помилок, та їх обробку:
// Створюємо екземпляр global $form_error; $form_error = новий WP_Error; // Будь-яка функція, можливо в іншому файлі function foo(){ global $form_error; // якийсь код. // Перевірка поля if( empty( $email ) ){ $form_error->add('no_email', 'Заповніть email'); } elseif( ! is_email( $email ) ){ $form_error->add('invalid_email', 'Некоректний email'); } // Перевіряємо чи помилка обриваємо роботу функції if ( $form_error->get_error_code() ) return; // виходимо далі роботу функції не продовжуємо через помилку } // Інший файл (не той, де функція foo() або той, не важливо) - файл де виводяться // Повідомлення про помилки якщо такі є. // Перевіряємо чи є помилка і виводимо всі повідомлення, якщо помилка if ( $form_error->get_error_code() ) { foreach( $form_error->get_error_messages() as $error ){ echo '<div><strong>Помилка</strong>:'. $error .'</div>'; } }
#3 Який виглядає екземпляр класу?
Щоб являти собою об’єкт WP_Error , пропоную подивитися на нього в заповненому вигляді:
// створюємо екземпляр і відразу додаємо дані - метод add() $error = new WP_Error( 'fallen', 'Жук упав і стати не може.' ); // додамо ще дані об'єкт $error->add( 'help', 'Чекає він, хто йому допоможе.' ); /* $error містить WP_Error Object ( [errors] => Array ( [fallen] => Array ( [0] => Жук упав і встати не може. ) [help] => Array ( [0] => Чекає він, хто йому допоможе. ) ) [error_data] => Array ( ) ) */ // Додамо ще дані та вкажемо третій параметр $error->add( 'frost', 'Іній ліг на гілки ялини.', 'error' ); $error->add( 'white', 'Голки за ніч побіліли.', 'message' ); /* тепер $error містить WP_Error Object ( [errors] => Array ( [fallen] => Array ( [0] => Жук упав і встати не може. ) [help] => Array ( [0] => Чекає він, хто йому допоможе. ) [frost] => Array ( [0] => Іній ліг на гілки ялини. ) [white] => Array ( [0] => Голки за ніч побіліли. ) ) [error_data] => Array ( [frost] => error [white] => message ) ) */ $all_data = $error->get_all_error_data( 'white' ); /* $all_data містить: Array ( [0] => message ) */ $data = $error->get_error_data( 'white' ); /* $data містить: message */
Властивості класу
-
$errors
(масив) - Асоціативний масив, що містить перелік помилок. Де ключ – код помилки, а значення тексту – помилка.
-
$error_data
(масив) - Асоціативний масив, що містить список даних для вказаного в $ errors коду помилки.
Примітка: з версії 4.0, ці властивості класу мають видимість private, але завдяки чарівним методам їх як і раніше можна отримати публічно.
Методи класу
- public __construct( $code = ”, $message = ”, $data = ” )
- public add( $code, $message, $data = ” )
- public add_data( $data, $code = ” )
- protected static copy_errors( WP_Error $from, WP_Error $to )
- public export_to( WP_Error $error )
- public get_all_error_data( $code = ” )
- public get_error_code()
- public get_error_codes()
- public get_error_data( $code = ” )
- public get_error_message( $code = ” )
- public get_error_messages( $code = ” )
- public has_errors()
- public merge_from( WP_Error $error )
- public remove( $code )
- __construct( $code = ”, $message = ”, $data = ” )
-
Додає помилку об’єкт (код (ключ), текст, додаткові дані). Якщо параметр
$code не встановлено, інші параметри будуть проігноровані. Якщо $code встановлено, то параметр $message буде використаний навіть якщо там порожній рядок, але параметр
$data у цьому випадку, буде використаний тільки якщо він не порожній. За допомогою методу
add() можна створювати кілька повідомлень під одним кодом. - get_error_codes()
- Отримує всі ключі помилок. Доступ публічний повертає масив кодів помилок, якщо такі є.
- get_error_code()
- Отримує перший ключ помилки. Доступ до публічного, повертає рядок/число або порожній рядок, якщо кодів взагалі немає.
- get_error_messages( $code = ” )
- Отримує всі тексти помилок або всі тексти помилок під вказаним ключем. Доступ до публічного, повертає масив текстів помилок або порожній масив, якщо помилок немає.
- get_error_message( $code = ” )
- Отримує окреме повідомлення (текст) за переданим кодом (ключом) помилки. Якщо під ключом кілька повідомлень, то повернеться лише перше. Якщо параметр $code не передано, буде оброблений перший ключ.
- get_error_data( $code = ” )
- Отримує дані помилки за переданим ключем (кодом) помилки. Поверне значення (рядок/масив/булів) або null якщо даних немає.
- add($code, $message, $data = ”)
- Додає повідомлення до об’єкта (до списку помилок). Нічого не вертає.
- add_data( $data, $code = ” )
- Додає дані помилки (тексту) пов’язані із зазначеним ключем (кодом) помилки (тексту).
-
remove( $code )
(WP 4.1) - Видаляє помилку (повідомлення) з об’єкта за переданим ключем (кодом). Нічого не вертає.
-
has_errors()
(WP 5.1) - Повертає логічне значення, яке вказує на те, чи містить екземпляр помилки.
список змін
З версії 2.1.0 | Введено. |