Update_post_meta ve delete_post_meta nasıl bağlanır?


29

Hala başımın etrafındaki şeylere takılmak için uğraşıyorum, bu yüzden aşağıdaki görevi yapmaya çalışıyorum:

Eğer kovulduysa, bir şeyin eşit update_post_metaolup olmadığını kontrol edin meta_key(belirli bir meta_key kullanılıyorsa bazı kodu tetiklemek istiyorum). Aradığım meta anahtar, o zaman $post->IDgüncellenen meta anahtarın bilinmesi gereken bazı kodları çalıştırın .

Ben delete_post_metade bunun gibi tersi yapmam gerekiyor .

Herkes içine çengel için bazı örnek kod ile beni sağlayabilir update_post_metave delete_post_meta?

Yanıtlar:


45

update_post_metaKancalar daha genel çağrılan update_metadata()doğrudan buldum olmayabilirdi bu yüzden, işlevi. Üç kanca:

  • update_post_metadata, meta veri güncellemesini "kaçırmanıza" ve başka bir şey yapmanıza olanak sağlayan bir filtredir. Bir boole döndüren bir işlevi bağlarsanız, yürütme orada durur ve boole döndürülür.
  • update_post_metaveritabanındaki veriler güncellenmeden önce çağrılan bir eylem .
  • updated_post_metaveritabanındaki veriler güncellendikten sonra çağrılan bir eylem .

Meta anahtarı henüz veritabanında olmasaydı, update_metadata()kontrol geçer add_metadata()benzer kancalar olan, add_post_metadata, add_post_metave added_post_meta. Bu update[d]_post_metaçağrılmadan önce olur. Meta tuşu eklendiğinde size bir şey yapmak istiyorum Yani eğer ya güncellenen emin ikisi içine kanca olmak update*ve add*fakat ederken bildirimi o - kancalar updated_*ve added_*eylemler benzer parametreleri geçmek update_*ve add_*yok ( add_post_metailk meta kimliği geçmez) .

delete_metadata()benzer kancalar vardır: delete_post_metadata, delete_post_metave deleted_post_meta.

Basit kod:

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

Bunun için süper teşekkürler. Ben yaklaşık farkındaydı update_post_metakullanarak update_metadatave orada, hiç kancalar vardı added_post_metave updated_post_metakadarıyla alabilir olduğunca ama şu. Nasıl kullanılacağını anlamadım. Ama şimdi anladım sanırım :)
Brady

3
Daha spesifik olarak, kancaupdated_{$post_type}_meta
Benjamin Intal

8

Jan cevabı, Özel Düzenleme Verileri sayfasından özel bir meta verinin silinmesi durumu haricinde hemen hemen bunu kapsar. Bu, meta verilerin altındaki "Sil" düğmesini tıkladığınızda, wp-admin / admin-ajax.php çağrısıyla eşzamansız olarak gerçekleşir. Ne yazık ki, bu çağrılar delete_metadata()meta.php işlevini atlar ve delete_meta()bunun yerine wp-admin / include / include.php işlevini çağırır (wp-include / post.php ile karıştırılmamalıdır).

Yine de delete_postmeta(silme deleted_postmetaişleminden önce) ve (silme işleminden sonra ) kullanılabilecek 2 eylem vardır . Her ikisi $midde, meta verinin kimliği olan tek bir parametreyi kabul eder ( anahtar değil ). Aşağıdakileri kullanarak meta veri nesnesini alabilirsiniz:

$meta = get_post_meta_by_id($mid);  

meta_id, post_id, meta_key abd meta_value olan bir nesne döndürür. Tabii ki, zamanla deleted_postmetameta veri silindi, bu yüzden get_post_meta_by_id()işe yaramayacak (ki bu işlemi işe yaramaz hale getirdi)

Aynı Özel Mesajları Düzenle sayfasından güncelleme için de geçerlidir. update_metadata()Meta.php işlevi (ve eylemler) olduğu değil adlandırılan, ancak update_meta()wp-admin fonksiyon / includes / post.php yerine olduğunu. Burada yine iki eylem update_postmetave updated_postmeta. Argümanlar $ meta_id, $ post_id, $ meta_key, $ meta_value.

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.