Cum să tratezi/gestionezi un obiect WP Error
Rulez unele dintre funcțiile WordPress direct în interiorul unui plugin, inclusiv wp_insert_post(), iar dacă ceva nu funcționează corect, acesta returnează un obiect WP Error. Care este metoda corectă de a prinde această eroare? Fie folosind funcții încorporate WordPress, fie excepții PHP sau alte metode...
Atribuiți rezultatul funcției unei variabile.
Verificați variabila cu
is_wp_error()
.Dacă este
true
, gestionați în consecință, de exemplu folosindtrigger_error()
cu mesajul din metodaWP_Error->get_error_message()
.Dacă este
false
- continuați în mod normal.
Utilizare:
function create_custom_post() {
$postarr = array();
$post = wp_insert_post($postarr);
return $post;
}
$result = create_custom_post();
if ( is_wp_error($result) ){
echo $result->get_error_message();
}

Salut,
mai întâi verifici dacă rezultatul tău este un obiect WP_Error
sau nu:
$id = wp_insert_post(...);
if (is_wp_error($id)) {
$errors = $id->get_error_messages();
foreach ($errors as $error) {
echo $error; //acesta este doar un exemplu și în general nu este o idee bună, ar trebui să implementezi modalități de procesare a erorilor mai departe și să folosești hook-urile de eroare/mesaj din WP pentru a le afișa
}
}
Aceasta este metoda obișnuită.
Dar obiectul WP_Error poate fi instanțiat fără ca vreo eroare să se fi produs, doar pentru a acționa ca un depozit general de erori pentru orice eventualitate. Dacă vrei să faci asta, poți verifica dacă există erori folosind get_error_code()
:
function my_func() {
$errors = new WP_Error();
... //facem niște operații
if (....) $errors->add('1', 'Eroarea mea personalizată'); //în anumite condiții stocăm o eroare
.... //continuăm cu alte operații
if (...) $errors->add('5', 'Cealaltă eroare personalizată'); //în anumite condiții stocăm altă eroare
.... //și mai facem alte operații
if ($errors->get_error_code()) return $errors; //codul următor este vital, așa că înainte de a continua trebuie să verificăm dacă au apărut erori...dacă da, returnăm obiectul de eroare
.... // facem operații vitale
return $my_func_result; // returnăm rezultatul real
}
Dacă faci asta, poți apoi verifica și procesa eroarea returnată la fel ca în exemplul wp_insert_post()
de mai sus.
Clasa este documentată în Codex.
Și există și un mic articol aici.
