Cara menangkap / apa yang harus dilakukan dengan Objek Kesalahan WP

15

Saya menjalankan beberapa fungsi WP langsung di dalam sebuah plugin, termasuk wp_insert_post (), jika terjadi kesalahan, ini mengembalikan objek WP Error, apa metode yang benar untuk menangkap kesalahan ini? Baik menggunakan fungsi WP bawaan atau pengecualian PHP atau yang lainnya ..

Dunhamzzz
sumber
4
Hanya untuk menambah dan memperjelas apa yang dikatakan dalam jawabannya di sini, WP_Erroradalah tidak PHP Exceptionobjek. Anda tidak menggunakan try/catchmetode dengannya. Tetapi seperti disebutkan, ada fungsi kenyamanan untuk membuatnya mudah digunakan.
Dougal Campbell

Jawaban:

21
  1. Tetapkan kembali fungsi ke variabel.

  2. Periksa variabel dengan is_wp_error().

  3. Jika truemenangani sesuai, misalnya trigger_error()dengan pesan dari WP_Error->get_error_message()metode.

  4. Jika false- lanjutkan seperti biasa.

Pemakaian:

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

Hei,

pertama, Anda memeriksa cuaca hasil Anda adalah WP_Errorobjek atau tidak:

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

Ini cara yang biasa.

Tetapi objek WP_Error dapat di-instanciated tanpa terjadi kesalahan, hanya untuk bertindak sebagai penyimpanan kesalahan umum untuk berjaga-jaga. Jika Anda ingin melakukannya, Anda dapat memeriksa apakah ada kesalahan dengan menggunakan 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
}

Jika Anda melakukannya, Anda kemudian dapat memeriksa proses kesalahan yang dikembalikan seperti pada wp_insert_post()contoh di atas.

Kelas didokumentasikan pada Codex .
Dan ada juga artikel kecil di sini .

wyrfel
sumber
Terima kasih! Cuplikan pertama Anda berfungsi untuk wp_insert_user.
Mohammad Mursaleen
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Ini akan menunjukkan kepada Anda apa yang salah dengan fungsi penyisipan posting wordpress. Cobalah !


sumber