Bir gönderi çöp kutusuna taşındığında yürütülecek işlev.


9

Merhaba bir yazı çöp kutusuna taşındığında gerçekleştirilebilecek bir eylem var .... delete_post ve deleted_post denedim. Her eylem için iki kez çalışır (kodeksde yazıldığı gibi eylemden önce ve sonra) ve çıktı yalnızca posta çöp kutusundan silindiğinde gösterilir. Örnek, yazarın gönderisinin bir nedenden dolayı çöp kutusuna taşındığını belirten bir e-posta göndermek ve bazı user_meta'yı güncellemek istiyorum. kullanırsam

add_action('deleted_post', 'emailUser');

veya

add_action('delete_post', 'emailUser');

yalnızca yayın çöp kutusundan silindiğinde çalışır. . .

Güncelleme: kullanarak çöp gönderileri için işe yaradı

add_action('trash_post', 'emailUser');

ancak işlevin çift yürütülmesi sorunu hala oradadır. . .


1
Aşağıdaki çözümü yazın ve cevap olarak işaretleyin
Ashfame

fonksiyonun çift uygulanması hala orada olduğu için doğru cevap değil ...
Harjeet Singh

Yanıtlar:


10

Bu hile yapacak!

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

Burada işlevi ekliyoruz ve kancanın did_action kullanarak bir kereden fazla yürütülmesini önlemek için:

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

Her zaman olduğu gibi, kanca bu tür şeklinde {post_status}_{post_type}, yani trash_post, trash_page, trash_customposttype, publish_pagevb


2

Bu işlem, gönderi çöp kutusuna taşındığında bir kez ve daha sonra çöp kutusu boşaltıldığında çağrılır.

İşleviniz adında posta kimliğine sahip bir seçeneğin olup olmadığını kontrol edebilir, seçenek orada değilse e-postayı gönderir ve seçeneği ayarlar. Seçenek varsa (örneğin ikinci kez çağrılırsa) e-postayı göndermezsiniz.

O zaman seçeneği silmek için unutmayın, böylece veritabanı onlarla doldurmaz!

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

}

Bunun işe yarayıp yaramadığını bana bildirin!



Teşekkürler Simon harika çalışıyor. . . . bilmiyorum nasıl n neden bu özledim. . ..
Harjeet Singh

Bainternet, geçici geçişleri gördüm ve benim durumumda get_option'a oldukça benziyorlar ve yürütme de sunucu performansına ve silme işleminden önce ve sonra kod yürütme süresinin hesaplanmasına bağlı olarak silme işlemi için get_option ile sopa yapıyorum posta zor olabilir.
Harjeet Singh

Seçenek alanları veya geçici öğeler eklemeye / düzenlemeye, ekstra sorgular eklemeye hiç gerek yoktur. Bunun yerine, çağrının zaten tetiklenip tetiklenmediğini kontrol etmek için did_action öğesini çağırmanız yeterlidir.
Tom J Nowell

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

Yukarıdaki kanca WP 4.7.5'te benim için çalışmadı.

Bu benim için işe yaradı

add_action('wp_trash_post', 'trash_post_function_name');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.