güncelleme sonrası kanca için doğru yolu nedir


19

Yazı güncellendiğinde kanca yapmaya çalışıyorum ama denediğim tüm kanca updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

Ben bunu denedim add_action('save_post', 'my_function');ama hiçbir id yankı çıktı, ya da belki bu mesaj zaten yankı ama yönlendirme başlığı gönderilir çünkü asla render.


2
sonra bir boşluğunuz var save_post, bu bir yazım hatası mı, yoksa orijinal kodunuzda mı? ayrıca, geliştirme sırasında hata ayıklamayı etkinleştirin .
Milo

@Milo üzgünüm yazım hatası, ancak orijinal kodda değil
rusly

bu durumda, yeni bir yayın oluştururken çıktınızı ekranın sol üst köşesinde görmelisiniz. mevcut bir gönderiyi kaydetme yeniden yönlendirmeden önce gerçekleştiğinden, hata ayıklamayı etkinleştirmedikçe hiçbir şey görmezsiniz.
Milo

Yanıtlar:


55

Bir yayın güncellendiğinde, ateşlenen bazı kancalar vardır:

  • 'pre_post_update', yazı güncellenmeden hemen önce yapılan bir işlemdir , iletilen bağımsız değişken 2'dir: $post_IDve $databu, yazı tablosunun diğer tüm veritabanı sütunlarının bir dizisidir
  • 'transition_post_status'güncellemede tetiklenen bir kancadır ve 3 argüman iletir: $ new_post_status $old_post_statusve $post(object).
  • Daha sonra, ateşlenen diğer 2 geçiş kancası vardır, ancak dinamik olarak adlandırılırlar, ateşlenen etkili eylemin eski ve yeni posta durumuna bağlı olduğu anlamına gelir. "{$old_status}_to_{$new_status}"ve "{$new_status}_{$post->post_type}". İlk olarak sadece post nesnesini argüman olarak, ikincisi post id ve post nesnesini iletin. Belgeleri burada bulabilirsiniz .
  • 'edit_post'2 bağımsız değişkeni ileten: $post_IDve $post(nesne)
  • 'post_updated'bu geçiş 3 parametreler: $post_ID, $post_after(güncellemeden sonra sonrası nesne), $post_before(post nesne güncellemeden önce)
  • Başka dinamik kanca: "save_post_{$post->post_type}"Yayın türüne bağlıdır, örneğin standart mesajların içindir 'save_post_post've sayfalar için olan 'save_post_page'bu kanca geçerler 3 argümanlar,: $post_ID, $post(nesne) ve $updateki, bir güncelleme gerçekleştirdiğinizde doğrudur (doğru veya yanlış) bir boolean aslında bir kanca ilk kez kaydedildiğinde bu kanca ateşlenir.
  • ' save_post' hem güncelleme hem de ilk kaydetme sırasında tetiklenir ve önceki kancanın aynı 3 argümanını iletir.
  • ' save_post_{$post_type}' hem güncelleme hem de ilk kaydetme sırasında tetiklenir ve önceki kancadaki ilk 2 argümanı geçirir.
  • Sonunda ' wp_insert_post' , hem güncelleme hem de ilk kaydetme sırasında işlenir ve önceki 2 kancanın aynı 3 argümanını iletir.

Bunlar kanca sonrası her güncellendiğinde ateş edilir, arka uç ve güncellenmiş zaman "manuel" seçeneğini kullanarak aracılığıyla yönetici sayfaları üzerinden hem wp_update_postveya wp_insert_postfonksiyonlar.

Gönderi yönetici sayfaları kullanılarak güncellendiğinde, ek kancalar açılır, bir örnek 'update_post_redirect'veya 'post_updated_messages'. ( Kullanım örnekleri için buna ve bu WPSE yanıtlarına bakın).

Bazı kanca argümanlarından yararlanmak istiyorsanız, bu ilk değil, açıkça add_actionçağrıda bildirmeniz gerektiğini unutmayın .

Örneğin, kullanmak istediğiniz takdirde '$update'argüman (3 olduğunu) ait 'save_post'kanca eklemek gerekir 3olarak $accepted_argsüzerinde param add_action( docs bakınız ):

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

Zamanlama ile ilgili son not : eylem tetiklenmeden önceadd_action çağrıldığından emin olmalısınız , aksi takdirde hiçbir şey yapmaz.

Örneğin bu kod:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

hiçbir şey yapmaz, çünkü kanca ateşlendikten sonra eylem eklenir. İşte bunu tanımak basit, gerçek dünyada her zaman böyle değil.


Ben de 'save_post' eylem kanca da gösterge tablosunda Yeni Ekle (Yazı, Sayfa, CPT) vurulduğunda ateş olduğunu düşünüyorum. Kendinizi görmek için bu kodu çalıştırın. function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );'Save_post' işlemi neden Yayınlama yerine Yeni Ekle üzerinde çalışır? Sanırım otomatik taslak yazıyı yapmak için.
lowtechsun

@lowtechsun A'da söylendiği gibi, bir yazı her güncellendiğinde kancalar ateşlenir, yani DB'ye kaydedilir. "Yeni Ekle" yi tıkladığınızda, sayfa yüklemeye yakın olarak WP, DB'de saklanan bir taslak yayın oluşturur, böylece kancalar işlenir.
gmazzap

Bana geri döndüğün için teşekkür ederim. Bunu dün öğrendim ve bu kavramın kafa karıştırıcı olduğunu düşündüm. Anlamı önce yeni bir yazı eklemek için sayfayı açıyorum. Bu aşamada ben var sanıyordum değil zaten bir yazı yarattı. Sadece bir kez ben Yayınla vurmak Yeni mesaj oluşturulur düşünürdüm. Otomatik Taslak yayını silinir mi bu işi olabilir umut WP alarak eğer ben Yeni Ekle ama sonra Yayınla basmadan sayfadan ayrılmak vurdu?
lowtechsun

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.