Kayıt verilerini kaydedilmeden önce nasıl düzenleyebilirim?


19

Bir eklenti var ve ben veritabanına kaydedilmeden önce bazı filtreler yoluyla yazı içeriğini çalıştırmak mümkün olmak istiyorum. Eklenti API'sine baktığımda, yardımcı olabilecekleri gibi görünen iki kancayı görüyorum:

save_post
wp_insert_post

Tek sorun, save_postbir değişken döndürmesi gerekmez gibi görünüyor ve bu yüzden içeriği nasıl filtreleyeceğini bilmiyorum ve wp_insert_postbelgelenmiş görünüyor.

Böyle bir şey yapmak istiyorum:

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

Bir zaman damgası eklemek daha yararlı bir şey yapacağım, yani bazı regex filtreleri çalıştıracağım, ama bu eklemek için çalışıyorum genel filtre / eylem türüdür.

Güncelleme

Lütfen, veriyi yazıya kaydedildiğinde değil, veritabanına kaydedilme yolunda kesmek istediğimi unutmayın (örn: Bir filtre ekleyerek değil the_content)


Not: Kötü bir tasarım var :-) 1. her yazı kaydedilirdi, bu dize eklenir. Önceki birini silmek yoksa (, bir sürü en "nin olsun This post was...: "Böyle bu bir :-) BTW yazının bir meta değeri olarak saklanmalıdır 2. verileri s save_postdenir sonra bu nedenle, veri kurtarıldı sonra ona veritabanına kaydedildi (istediğinizi değil).
jave.web

Yanıtlar:


29

Wp_insert_post_data filtre bunu yapabilir:

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}

2
beni doğru yöne götürdü, teşekkürler. sanırım add_actionbunun yerine kullanmak zorundasın add_filter. Ayrıca senin wpse35931_filter_post_datave filter_handlertutarsız ...
cwd

1
Öyle kesinlikle bir filtre. Filtreler ve eylemler, bazı geçişlere izin veren aynı işlevselliğe dayanmasına rağmen. Eğer bir eylem olarak bu kullanırsanız, ancak, olacak değil bütün mesele ortadan kaldıracaktır verileri döndürmek mümkün. Verileri FİLTRE ve ardından geri döndürmek istiyorsunuz.
Jake

2
wp_insert_post_dataçalışır, ancak OP'nin (ve belki de başkalarının) başarmak istediği şey için biraz güçlenir. Bu durumda daha basit bir seçenek content_save_pre@ drzaus tarafından önerildiği gibidir.
rinogo

1
wp_insert_post_dataFiltre için geliştirici dokümanlar : developer.wordpress.org/reference/hooks/wp_insert_post_data
jave.web

Bu kanca, siz bir a) mümkün olan her yolla kaydedildiğinde (örneğin arka uç, ön uç aracılığıyla), örneğin bir gönderi eklemek / güncellemek için temanızın function.php dosyasını manuel olarak wp_insert_post () olarak çağırır mı? , başka türlü ...)?
Vadim H


2

Kancayı da kontrol edebilirsiniz pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

Yerine aktif tema aşağıdaki kodu ekleyin <shell>ile [shell]kaydetmeden önce:

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<shell>', '[shell]', $value);
 }

0

Tüm gönderilerin sonuna benzer bir şey eklemek istiyorsanız, the_contentfiltreyi kullanmanızı öneririm .

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );

Teşekkürler ama aslında veritabanına kaydedilmeden önce verileri düzenlemek istiyorum.
cwd
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.