เมื่อโพสต์ได้รับการปรับปรุงจะมีตะขอบางตัวที่ถูกเปิดใช้งาน:
'pre_post_update'คือการดำเนินการก่อนที่การโพสต์จะได้รับการอัปเดตอาร์กิวเมนต์ที่ผ่านเป็น 2: $post_IDและ$dataนั่นคืออาร์เรย์ของcolums ฐานข้อมูลอื่น ๆทั้งหมดของตารางโพสต์
'transition_post_status'เป็นฮุกที่ใช้ในการอัพเดทและส่งผ่านอาร์กิวเมนต์ 3 รายการ: $ new_post_status $old_post_statusและ$post(วัตถุ)
- จากนั้นจะมีการเปิดใช้ตะขอการเปลี่ยนแปลงอีก 2 รายการ แต่เป็นชื่อแบบไดนามิกหมายความว่าการดำเนินการที่มีประสิทธิภาพเริ่มขึ้นกับสถานะเก่าและโพสต์ใหม่
และ
"{$old_status}_to_{$new_status}" "{$new_status}_{$post->post_type}"ขั้นแรกให้ส่งผ่านเฉพาะวัตถุที่โพสต์เป็นอาร์กิวเมนต์ที่สองผ่านรหัสโพสต์และวัตถุที่โพสต์ ค้นหาเอกสารที่นี่
'edit_post'อาร์กิวเมนต์ส่งผ่าน 2 ข้อ: $post_IDและ$post(วัตถุ)
'post_updated'ผ่าน 3 อาร์กิวเมนต์: $post_ID, $post_after(วัตถุโพสต์หลังการอัพเดท), $post_before(วัตถุโพสต์ก่อนการอัพเดท)
- ตะขอแบบไดนามิกอื่น:
"save_post_{$post->post_type}"ที่ขึ้นอยู่กับประเภทโพสต์เช่นการโพสต์มาตรฐานคือ'save_post_post'และสำหรับหน้าเว็บที่เป็น'save_post_page'เบ็ดนี้ผ่าน 3 ข้อโต้แย้ง: $post_ID, $post(วัตถุ) และ$updateที่เป็นแบบบูล (จริงหรือเท็จ) ที่เป็นจริงเมื่อคุณดำเนินการปรับปรุงใน ความจริงเบ็ดนี้ถูกไล่ออกเมื่อบันทึกโพสต์เป็นครั้งแรก
- '
save_post'ที่ใช้ทั้งในการอัปเดตและการบันทึกครั้งแรกและส่งผ่านอาร์กิวเมนต์ 3 ตัวของ hook ก่อนหน้านี้
- '
save_post_{$post_type}'ที่ถูกเปิดใช้งานทั้งในการอัปเดตและการบันทึกครั้งแรกและส่งผ่านอาร์กิวเมนต์ 2 ตัวแรกของ hook ก่อนหน้านี้
- ในที่สุดคุณก็มี'
wp_insert_post'ที่ถูกเปิดใช้งานทั้งในการอัปเดตและการบันทึกครั้งแรกและส่งผ่านอาร์กิวเมนต์ 3 ตัวของ hooks 2 ตัวก่อนหน้า
hook เหล่านี้จะเริ่มทำงานทุกครั้งที่มีการอัปเดตโพสต์ทั้งผ่านหน้าผู้ดูแลระบบในแบ็กเอนด์และผ่านเมื่ออัปเดต "ด้วยตนเอง" โดยใช้wp_update_postหรือwp_insert_postฟังก์ชั่น
เมื่อโพสต์ที่มีการปรับปรุงโดยใช้หน้าผู้ดูแลระบบมีตะขอเพิ่มเติมยิงตัวอย่างเป็นหรือ'update_post_redirect' 'post_updated_messages'(ดูที่นี่และ คำตอบของ WPSE นี้สำหรับตัวอย่างการใช้งาน)
โปรดทราบว่าหากคุณต้องการใช้ประโยชน์จากอาร์กิวเมนต์ hooks บางตัวนั่นไม่ใช่ข้อแรกคุณต้องประกาศอย่างชัดเจนในการadd_actionโทร
เช่นหากคุณต้องการใช้'$update'อาร์กิวเมนต์ (นั่นคืออันดับที่ 3) ของ'save_post'hook คุณต้องเพิ่ม3เป็น$accepted_argsparam on add_action( ดูเอกสาร ):
// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );
function my_save_post_function( $post_ID, $post, $update ) {
$msg = 'Is this un update? ';
$msg .= $update ? 'Yes.' : 'No.';
wp_die( $msg );
}
ข้อสังเกตสุดท้ายเกี่ยวกับเวลา : คุณต้องแน่ใจว่าadd_actionมีการเรียกใช้ก่อนที่การกระทำจะเริ่มขึ้นมิฉะนั้นจะไม่ทำอะไรเลย
เช่นรหัสนี้:
wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );
จะไม่ทำอะไรเลยเพราะมีการเพิ่มการกระทำหลังจากเบ็ดถูกไล่ออก ที่นี่ง่ายต่อการจดจำในรหัสโลกแห่งความจริงไม่ได้เป็นเช่นนั้นเสมอไป
save_postนั้นพิมพ์ผิดที่นี่หรือว่าในรหัสเดิมของคุณ? นอกจากนี้ยังช่วยให้การแก้จุดบกพร่องขณะที่การพัฒนา