เหตุใดการกระทำของ save_post จึงเริ่มทำงานเมื่อสร้างโพสต์ใหม่


31

ฉันประหลาดใจกับความจริงที่ว่าฟังก์ชั่นของฉันที่ฉันติดไว้กับsave_postการกระทำนั้นเกิดขึ้นเมื่อฉันคลิกลิงก์ "โพสต์ใหม่" ในแผงควบคุมของผู้ดูแลระบบ หมายเหตุ - นี่เป็นก่อนที่ฉันจะกดSaveหรือUpdateและจะเริ่มทันทีไม่ใช่หลังจากเวลาผ่านไปหรืออัปเดตอัตโนมัติ

ในทางกลับกันเมื่อฉันพิมพ์บางอย่างแล้วกดPublishหรือUpdateหรือSave Draftปุ่มคำสั่ง echo ที่ฉันใส่ไว้ในตัวจัดการการกระทำของฉันไม่ได้สะท้อนออกมาดังนั้นจึงปรากฏว่าการกระทำนั้นไม่ได้ยิงในเวลาอื่น สิ่งนี้อาจไม่เกี่ยวข้อง

นี่คือรหัสของฉัน:

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

YES นี้สะท้อน (ที่ด้านบนของหน้า) เมื่อกดลิงก์ "โพสต์ใหม่" แต่ไม่ได้สะท้อนเมื่อฉันพิมพ์บางสิ่งบางอย่างแล้วกดUpdateหรือหรือPublish Save Draftนี่ดูเหมือนจะขัดแย้งกับเอกสารเกี่ยวกับsave_postการกระทำและwp_insert_post()ฟังก์ชั่น

ใครช่วยเคลียร์สิ่งนี้ให้ฉันได้บ้าง?


ที่น่ากลัว !!! ฉันกำลังทำงานในสถานการณ์เดียวกันเมื่อบันทึกเขตข้อมูล metabox แบบกำหนดเอง ความคิดใด ๆ ที่ฉันสามารถใช้ได้ ??
Prasath Nadarajah

คำตอบ:


39

เมื่อคุณคลิก 'โพสต์ใหม่' wp-admin/post-new.phpคุณเพียงแค่โหลดหน้าเว็บ

ในการทำเช่นนั้น WordPress จะสร้างโพสต์ใหม่ ('ร่างอัตโนมัติ') เพื่อให้แน่ใจว่าคุณสมบัติอื่น ๆ ทั้งหมด (เช่นการอัปโหลดสื่อ) และปลั๊กอินทำงานตามปกติแม้ก่อนที่คุณจะบันทึกร่างจดหมายจริงหรือเผยแพร่โพสต์

save_postและนี้ในการเปิดทริกเกอร์ ดังนั้นเสียงสะท้อนของคุณ

โอเคเหตุใดฉันจึงไม่ได้รับเสียงสะท้อนเมื่ออัปเดตหรือเผยแพร่

ในระหว่างการออมและการโหลดหน้าต่อไปนี้ WordPress เป็นจริงการส่งGETการเปลี่ยนเส้นทางกลับไปที่หน้าเดียวกันซึ่งปรากฏโปร่งใส (คุณสามารถเป็นพยานนี้กับจอภาพ HTTP เช่นHttpFox )

กล่าวอีกนัยหนึ่ง;

  1. คุณคลิกUpdateหรือPublish
  2. เบราว์เซอร์ส่งข้อมูลไปยังเซิร์ฟเวอร์
  3. WordPress จัดการกับมันและในกระบวนการก่อให้เกิด save_post
  4. WordPress ส่งกลับหัวข้อการเปลี่ยนเส้นทางและออกก่อนที่ผลลัพธ์ของเบราว์เซอร์ใด ๆ จะเกิดขึ้น (รวมถึงเสียงสะท้อนของคุณ) *
  5. เบราว์เซอร์ติดตามการเปลี่ยนเส้นทางและโหลดหน้า 'แก้ไขโพสต์'

เปลี่ยนเส้นทางอาจดูเหมือนไม่จำเป็น (ตั้งแต่คุณสามารถเพียงแค่POSTไปที่หน้าเดียวกัน) แต่มันก็เป็นส่วนหนึ่งของเทคนิคที่เรียกว่าโพสต์ / เปลี่ยนเส้นทาง / รับในการหลีกเลี่ยงการส่งแบบฟอร์มที่ซ้ำกัน

ถ้าคุณกำลังพยายามที่จะพิมพ์ออกข้อความที่กำหนดเองขึ้นอยู่กับผลของฟังก์ชั่นติดยาเสพติดsave_postตรวจสอบคำถามเหล่านี้ / คำตอบ

* ไม่เป็นความจริง แต่อย่างใดเสียงสะท้อนของคุณจะเกิดขึ้นก่อนที่จะส่งส่วนหัวของการเปลี่ยนเส้นทาง แต่เบราว์เซอร์จะทิ้งมันหรือสิ่งต่าง ๆ เกิดขึ้นอย่างรวดเร็ว


โดดเด่น ขอบคุณสำหรับคำตอบที่สมบูรณ์และละเอียด! เพื่อให้เกิดความสนใจในการเรียนรู้มากขึ้นคุณค้นพบความรู้นี้ตั้งแต่แรกอย่างไร
Tom Auger

ด้วยความหงุดหงิดแบบเดียวกันกับที่คุณได้รับ;) ใช้ IDE ที่ดี (ฉันใช้ phpDesigner) และเพียงแค่เจาะลึกเข้าไปในไฟล์ผู้ดูแลระบบที่เกี่ยวข้อง
TheDeadMedic

1
อยู่กับพี่ชาย ขอบคุณที่อยู่กับความเชี่ยวชาญของคุณ!
Tom Auger

ข้อมูลที่น่าประทับใจ ฉันจะถั่วเพราะในเซิร์ฟเวอร์ท้องถิ่นของฉันดูเหมือนว่าจะทำงาน "ตกลง" แต่ไม่ได้อยู่ในเซิร์ฟเวอร์การผลิตของฉัน ... ดูเหมือนว่าในเซิร์ฟเวอร์ท้องถิ่นของฉันมันไม่ได้ใช้เทคนิคการโพสต์ / เปลี่ยนเส้นทาง / รับอย่างถูกต้องเพราะมันไม่ได้ ส่งหัวข้อการเปลี่ยนเส้นทาง (ไม่ทราบสาเหตุ)
WebMacheter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.