Cum pot edita datele unei postări înainte de a fi salvate?
Am un plugin și aș dori să pot procesa conținutul postării prin câteva filtre înainte de a fi salvat în baza de date. Uitându-mă la API-ul pentru plugin-uri, am observat două hook-uri care par să fie utile:
save_post
wp_insert_post
Singura problemă este că save_post
nu pare să necesite returnarea unei variabile, așa că nu știu cum să filtrez conținutul, iar wp_insert_post
pare documentat.
Aș dori să fac ceva de genul acesta:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
// returnează conținutul postării cu un timestamp adăugat
return $post_content.' <br> Această postare a fost salvată la '.time();
}
Urmează să fac ceva mai util decât adăugarea unui timestamp, mai exact să rulez niște filtre regex, dar acesta este tipul general de filtru / acțiune pe care încerc să-l adaug.
Actualizare
Vă rog să rețineți că vreau să interceptez datele în timp ce sunt salvate în baza de date - nu când sunt afișate în postare (de exemplu: Nu prin adăugarea unui filtru la the_content
)

Filtrul wp_insert_post_data poate face asta:
add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
// Modifică titlul postării
$data['post_title'] .= '_suffix';
return $data;
}

m-a îndreptat în direcția corectă, mulțumesc. cred că trebuie să folosești add_action
în loc de add_filter
. de asemenea, funcțiile tale wpse35931_filter_post_data
și filter_handler
nu sunt congruente...

Este cu siguranță un filtru. Deși filtrele și acțiunile se bazează pe aceeași funcționalitate care permite unele suprapuneri. Dacă folosești asta ca o acțiune, însă, nu vei putea returna datele, ceea ce ar elimina întregul scop. Vrei să FILTREZI datele și apoi să le returnezi.

wp_insert_post_data
funcționează, dar este un pic exagerat pentru ceea ce dorește OP (și poate alții) să realizeze. O opțiune mai simplă în această situație este content_save_pre
așa cum a recomandat @drzaus.

Documentația pentru dezvoltatori pentru filtrul wp_insert_post_data
: https://developer.wordpress.org/reference/hooks/wp_insert_post_data/

Acest hook este apelat ori de câte ori a) apelezi manual wp_insert_post() în, de exemplu, functions.php al temei tale pentru a insera/actualiza un post SAU b) ori de câte ori un post este salvat prin orice mijloc posibil (de ex. prin backend, prin frontend, altfel...)?

Folosește filtrul content_save_pre
exact ca the_content
-- diferența este că acesta funcționează atunci când un articol este salvat, nu atunci când este afișat.
http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

Conform https://developer.wordpress.org/reference/hooks/pre_post_update/, pre_post_update
este apelat doar la actualizare, nu la creare.

Dacă dorești să adaugi ceva similar la sfârșitul tuturor postărilor, atunci îți sugerez să folosești filtrul the_content
.
function append_to_content( $content ) {
global $post;
return $content.'<br />Acest post a fost salvat pe '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );
