วิธีจับ / สิ่งที่ต้องทำกับ WP Error Object


15

ฉันกำลังเรียกใช้ฟังก์ชัน WP บางอย่างภายในปลั๊กอินโดยตรงรวมถึง wp_insert_post () หากมีสิ่งผิดปกติสิ่งนี้จะส่งกลับวัตถุ WP Error สิ่งที่เป็นวิธีที่ถูกต้องในการตรวจจับข้อผิดพลาดนี้คืออะไร ไม่ว่าจะใช้ฟังก์ชั่น WP หรือข้อยกเว้น PHP หรืออะไรก็ตาม


4
เพียงเพื่อเพิ่มและชี้แจงสิ่งที่ถูกกล่าวในคำตอบที่นี่WP_Errorคือไม่ PHP ที่Exceptionวัตถุ คุณไม่ได้ใช้try/catchวิธีการต่าง ๆ แต่ตามที่ระบุไว้มีฟังก์ชั่นอำนวยความสะดวกเพื่อให้ใช้งานง่าย
Dougal Campbell

คำตอบ:


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

Hei,

ก่อนอื่นคุณต้องตรวจสอบสภาพอากาศว่าผลลัพธ์ของคุณเป็น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()ตัวอย่างด้านบน

ชั้นจะได้รับการบันทึกใน Codex
และนอกจากนี้ยังมีบทความเล็ก ๆ น้อย ๆ ที่นี่


ขอบคุณ! ตัวอย่างแรกของคุณทำงานกับ wp_insert_user
Mohammad Mursaleen

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

สิ่งนี้จะแสดงให้คุณเห็นว่ามีอะไรผิดปกติกับฟังก์ชั่นแทรกโพสต์ WordPress แค่ลองดู !

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.