Jak złapać / co zrobić z obiektem błędu WP

15

Korzystam z niektórych funkcji WP bezpośrednio w wtyczce, w tym wp_insert_post (), jeśli coś pójdzie nie tak, zwróci obiekt Błąd WP, ​​jaka jest poprawna metoda wychwycenia tego błędu? Albo za pomocą wbudowanych funkcji WP lub wyjątków PHP, albo co tam ...

Dunhamzzz
źródło
4
Wystarczy dodać do wyjaśnienia tego, co zostało powiedziane w odpowiedzi tutaj, WP_Errorto nie PHP Exceptionprzedmiot. Nie używasz try/catchz tym metod. Ale, jak wspomniano, istnieją funkcje ułatwiające obsługę.
Dougal Campbell,

Odpowiedzi:

21
  1. Przypisz powrót funkcji do zmiennej.

  2. Sprawdź zmienną za pomocą is_wp_error().

  3. Jeśli trueodpowiednio obsłużyć, na przykład trigger_error()z komunikatem z WP_Error->get_error_message()metody.

  4. Jeśli false- postępuj jak zwykle.

Stosowanie:

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();
}
Rarst
źródło
11

On ja,

najpierw sprawdzasz, czy Twój wynik jest WP_Errorobiektem, czy nie:

$id = wp_insert_post(...);
if (is_wp_error($id)) {
    $errors = $id->get_error_messages();
    foreach ($errors as $error) {
        echo $error; //this is just an example and generally not a good idea, you should implement means of processing the errors further down the track and using WP's error/message hooks to display them
    }
}

To jest zwykły sposób.

Ale obiekt WP_Error może zostać zaimplementowany bez żadnego błędu, aby na wszelki wypadek działał jako ogólny magazyn błędów. Jeśli chcesz to zrobić, możesz sprawdzić, czy są jakieś błędy, używając get_error_code():

function my_func() {
    $errors = new WP_Error();
    ... //we do some stuff
    if (....) $errors->add('1', 'My custom error'); //under some condition we store an error
    .... //we do some more stuff
    if (...) $errors->add('5', 'My other custom error'); //under some condition we store another error
    .... //and we do more stuff
    if ($errors->get_error_code()) return $errors; //the following code is vital, so before continuing we need to check if there's been errors...if so, return the error object
    .... // do vital stuff
    return $my_func_result; // return the real result
}

Jeśli to zrobisz, możesz sprawdzić proces zwracany błąd, tak jak w wp_insert_post()powyższym przykładzie.

Klasa jest udokumentowana w Kodeksie .
Jest też mały artykuł tutaj .

wyrfel
źródło
Dzięki! Twój pierwszy fragment działał dla wp_insert_user.
Mohammad Mursaleen,
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

To pokaże dokładnie, co jest nie tak z funkcją wstawiania tekstu w WordPressie. po prostu spróbuj !


źródło