Як зловити / що робити з WP Object Error


15

Я виконую деякі функції WP безпосередньо в плагіні, включаючи wp_insert_post (), якщо щось пішло не так, це повертає об'єкт помилки WP, який правильний метод виявити цю помилку? Або за допомогою вбудованих функцій WP або винятків PHP або нічого подібного ..


4
Просто , щоб додати і уточнити , що сказано у відповідях тут, WP_Errorце НЕ PHP - Exceptionоб'єкт. Ви не використовуєте try/catchз ним методів. Але, як зазначалося, існують зручні функції, які полегшують користування.
Дугал Кемпбелл

Відповіді:


21
  1. Призначте повернення функції змінній.

  2. Перевірте змінну за допомогою is_wp_error().

  3. Якщо trueповодиться відповідно, наприклад, trigger_error()з повідомленням від WP_Error->get_error_message()методу.

  4. Якщо false- продовжуйте, як завжди.

Використання:

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();
}

11

Хей,

по-перше, ви перевіряєте, чи є ваш результат WP_Errorоб’єктом чи ні:

$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
    }
}

Це звичайний спосіб.

Але об'єкт WP_Error може бути створений без будь-яких помилок, лише для того, щоб діяти як загальний запас помилок на всякий випадок. Якщо ви хочете зробити це, ви можете перевірити, чи є помилки, скориставшись 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
}

Якщо ви це зробите, ви можете перевірити, чи не повертається помилка, як в wp_insert_post()наведеному вище прикладі.

Клас задокументовано на Кодексі .
І тут також є невеличка стаття .


Спасибі! Ваш перший фрагмент зробив роботу для wp_insert_user.
Мохаммед Мурсалін

1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Це покаже вам, що саме не так з функцією вставки Wordpress Post. просто спробуйте!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.