Berfungsi untuk mengeksekusi ketika posting dipindahkan ke tempat sampah.

9

Hai apakah ada tindakan yang dapat dilakukan ketika sebuah tulisan dipindahkan ke sampah .... Saya mencoba delete_post dan delete_post. Ini berfungsi tetapi dua kali untuk setiap tindakan (sebelum dan sesudah tindakan sebagaimana ditulis dalam kodeks) dan output hanya ditampilkan ketika posting dihapus dari sampah. Contoh saya ingin mengirim email ke penulis yang menyatakan bahwa posnya telah dipindahkan ke sampah karena beberapa alasan, dan memperbarui beberapa user_meta. jika saya gunakan

add_action('deleted_post', 'emailUser');

atau

add_action('delete_post', 'emailUser');

ini hanya berfungsi ketika pos dihapus dari sampah. . .

Pembaruan: membuatnya berfungsi untuk menggunakan pos sampah

add_action('trash_post', 'emailUser');

tetapi masalah untuk pelaksanaan fungsi ganda masih ada. . .

Harjeet Singh
sumber
1
Tulis solusi di bawah ini dan tandai sebagai jawaban
Ashfame
itu bukan jawaban yang tepat karena eksekusi ganda fungsi masih ada ...
Harjeet Singh

Jawaban:

10

Ini akan melakukan triknya!

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

Di sini kita menambahkan fungsi, dan untuk mencegah kait mengeksekusi lebih dari sekali menggunakan did_action:

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

Seperti biasa, jenis-jenis kait mengambil formulir {post_status}_{post_type}, sehingga trash_post, trash_page, trash_customposttype, publish_pagedll

Tom J Nowell
sumber
2

Tindakan itu akan dipanggil sekali ketika pos dipindahkan ke tempat sampah, dan sekali lagi ketika tempat sampah dikosongkan.

Fungsi Anda dapat memeriksa keberadaan opsi dengan ID pos di namanya, jika opsi tersebut tidak ada di sana maka ia akan mengirim email dan kemudian menetapkan opsi. Jika opsi ada di sana (mis. Itu dipanggil untuk kedua kalinya) Anda tidak akan mengirim email.

Ingat kemudian untuk menghapus opsi, sehingga basis data Anda tidak mengisinya!

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 );
   }

}

Beri tahu saya jika itu berhasil!

Simon Blackbourn
sumber
Anda dapat menggunakan API Transients daripada opsi sehingga Anda tidak perlu khawatir menghapus opsi dari basis data codex.wordpress.org/Transients_API
Bainternet
Terima kasih Simon, itu bekerja dengan baik. . . . tidak tahu bagaimana dan mengapa saya melewatkan ini. . ..
Harjeet Singh
Bainternet, saya melihat transien dan mereka sangat mirip dengan get_option dalam kasus saya dan saya wud tetap dengan get_option untuk hal hapus juga karena eksekusi akan tergantung pada kinerja server juga dan perhitungan waktu eksekusi kode sebelum dan sesudah penghapusan posting mungkin menjadi sulit.
Harjeet Singh
Tidak perlu sama sekali untuk mulai menambahkan / mengedit bidang opsi atau transien, menambahkan pertanyaan tambahan. Alih-alih, panggil saja did_action untuk memeriksa apakah kail sudah diaktifkan.
Tom J Nowell
1
add_action('trash_post', 'trash_post_function_name');

Hook di atas tidak bekerja untuk saya di WP 4.7.5.

Inilah yang bekerja untuk saya

add_action('wp_trash_post', 'trash_post_function_name');
Mohamed Salem Lamiri
sumber