ฟังก์ชั่นเพื่อดำเนินการเมื่อโพสต์ถูกย้ายไปที่ถังขยะ


9

สวัสดีมีการดำเนินการที่สามารถทำได้ในขณะที่โพสต์ถูกย้ายไปที่ถังขยะ .... ฉันลอง delete_post และ delete_post มันใช้งานได้ แต่สองครั้งสำหรับแต่ละการกระทำ (ก่อนและหลังการกระทำตามที่เขียนไว้ใน codex) และเอาต์พุตจะแสดงเฉพาะเมื่อโพสต์ถูกลบออกจากถังขยะ ตัวอย่างฉันต้องการส่งอีเมลถึงผู้เขียนโดยระบุว่าโพสต์ของเขาถูกย้ายไปที่ถังขยะเนื่องจากเหตุผลบางประการและอัปเดต user_meta บางส่วน ถ้าฉันใช้

add_action('deleted_post', 'emailUser');

หรือ

add_action('delete_post', 'emailUser');

มันจะทำงานเฉพาะเมื่อโพสต์ถูกลบออกจากถังขยะ . .

อัปเดต: นำมาใช้เพื่อโพสต์ถังขยะโดยใช้

add_action('trash_post', 'emailUser');

แต่ปัญหาสำหรับการเรียกใช้ฟังก์ชันสองครั้งยังคงมีอยู่ . .


1
เขียนคำตอบด้านล่างและทำเครื่องหมายเป็นคำตอบ
Ashfame

ไม่ใช่คำตอบที่เหมาะสมในฐานะการดำเนินการคู่ของฟังก์ชั่นยังคงมี ...
Harjeet Singh

คำตอบ:


10

นี่จะเป็นการหลอกลวง!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

ที่นี่เราเพิ่มฟังก์ชั่นและเพื่อป้องกันการเรียกใช้มากกว่าหนึ่งครั้งโดยใช้ did_action:

http://codex.wordpress.org/Function_Reference/did_action

และเช่นเคยเหล่านี้ชนิดของตะขอใช้แบบฟอร์ม{post_status}_{post_type}เพื่อtrash_post, trash_page, trash_customposttype, publish_pageฯลฯ


2

การกระทำนั้นจะถูกเรียกหนึ่งครั้งเมื่อโพสต์ถูกย้ายไปที่ถังขยะและจากนั้นอีกครั้งเมื่อถังขยะถูกทำให้ว่างเปล่า

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

จำไว้ว่าให้ลบตัวเลือกดังนั้นฐานข้อมูลของคุณจะไม่เต็มไปด้วย!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

แจ้งให้เราทราบหากใช้งานได้!


คุณสามารถใช้ Transients API แทนตัวเลือกดังนั้นคุณไม่ต้องกังวลเกี่ยวกับการลบตัวเลือกจากฐานข้อมูลcodex.wordpress.org/Transients_API
Bainternet

ขอบคุณ Simon ที่ใช้งานได้ดี . . . ไม่รู้ว่าทำไมฉันจึงพลาดเรื่องนี้ . ..
Harjeet Singh

Bainternet ฉันเห็นทรานสเฟอร์และพวกมันค่อนข้างคล้ายกับ get_option ในกรณีของฉันและฉันก็ติดกับ get_option สำหรับสิ่งที่ลบเช่นกันเพราะการประมวลผลจะขึ้นอยู่กับประสิทธิภาพของเซิร์ฟเวอร์ด้วยและการคำนวณเวลาในการประมวลโค้ดก่อนและหลังการลบ โพสต์อาจมีปัญหา
Harjeet Singh

ไม่จำเป็นต้องมีเลยเพื่อเริ่มเพิ่ม / แก้ไขตัวเลือกเขตข้อมูลหรือชั่วคราวเพิ่มแบบสอบถามเพิ่มเติม เพียงแค่เรียก did_action เพื่อตรวจสอบว่าเบ็ดมีการยิงแล้ว
Tom J Nowell

1
add_action('trash_post', 'trash_post_function_name');

เบ็ดด้านบนไม่ทำงานสำหรับฉันใน WP 4.7.5

นี่คือสิ่งที่ได้ผลสำหรับฉัน

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