Cum să tratezi/gestionezi un obiect WP Error

4 mar. 2011, 15:58:48
Vizualizări: 40.5K
Voturi: 21

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...

1
Comentarii

Doar pentru a adăuga și a clarifica ceea ce se spune în răspunsurile de aici, WP_Error nu este un obiect PHP Exception. Nu utilizați metodele try/catch cu el. Dar, după cum s-a menționat, există funcții de facilitare care îl fac ușor de utilizat.

Dougal Campbell Dougal Campbell
4 mar. 2011 22:17:56
Toate răspunsurile la întrebare 3
0
33
  1. Atribuiți rezultatul funcției unei variabile.

  2. Verificați variabila cu is_wp_error().

  3. Dacă este true, gestionați în consecință, de exemplu folosind trigger_error() cu mesajul din metoda WP_Error->get_error_message().

  4. 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();
}
4 mar. 2011 16:08:02
1
14

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.

4 mar. 2011 16:13:19
Comentarii

Mulțumesc! Prima ta bucată de cod a funcționat pentru wp_insert_user.

Mohammad Mursaleen Mohammad Mursaleen
17 dec. 2014 12:37:54
0
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Aceasta va afișa exact ce este în neregulă cu funcția de inserare a postărilor în WordPress. Încercați-o!

20 apr. 2011 00:02:20