Come posso modificare i dati di un post prima che venga salvato?
Ho un plugin e vorrei poter eseguire il contenuto del post attraverso alcuni filtri prima che venga salvato nel database. Guardando le API del plugin, vedo due hook che sembrano poter essere utili:
save_post
wp_insert_post
Il problema è che sembra che save_post
non necessiti di restituire una variabile, quindi non so come filtrare il contenuto, e wp_insert_post
sembra documentato.
Vorrei fare qualcosa del genere:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
return $post_content.' <br> Questo post è stato salvato il '.time();
}
Ho intenzione di fare qualcosa di più utile che aggiungere un timestamp, nello specifico eseguire alcuni filtri regex, ma questo è il tipo generale di filtro/azione che sto cercando di aggiungere.
Aggiornamento
Si noti che voglio intercettare i dati mentre stanno per essere salvati nel database - non quando vengono visualizzati nel post (ad esempio: Non aggiungendo un filtro a the_content
)

Il filtro wp_insert_post_data può fare questo:
add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
// Modifica il titolo del post
$data['post_title'] .= '_suffisso';
return $data;
}

mi ha indirizzato nella direzione giusta, grazie. penso però che in realtà tu debba usare add_action
invece di add_filter
. inoltre i tuoi wpse35931_filter_post_data
e filter_handler
sono incongruenti...

È sicuramente un filter. Anche se filter e action sono basati sulla stessa funzionalità che permette un certo interscambio. Tuttavia, se usi questo come action, non sarai in grado di restituire i dati, il che eliminerebbe lo scopo principale. Vuoi FILTRARE i dati e poi restituirli.

wp_insert_post_data
funziona, ma è un po' eccessivo per quello che OP (e forse altri) vogliono ottenere. Un'opzione più semplice in questo caso è content_save_pre
come consigliato da @drzaus.

Documentazione per sviluppatori sul filtro wp_insert_post_data
: https://developer.wordpress.org/reference/hooks/wp_insert_post_data/

Questo hook viene chiamato quando: a) si chiama manualmente wp_insert_post() in, ad esempio, functions.php del tuo tema per inserire/aggiornare un post OPPURE b) ogni volta che un post viene salvato con qualsiasi mezzo possibile (es. tramite backend, tramite frontend, o in altro modo...)?

Utilizza il filtro content_save_pre
esattamente come the_content
-- la differenza è che opera quando un articolo viene salvato, anziché quando viene visualizzato.
http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

Secondo https://developer.wordpress.org/reference/hooks/pre_post_update/, pre_post_update
viene chiamato solo durante l'aggiornamento, non durante la creazione.

Se vuoi semplicemente aggiungere qualcosa di simile alla fine di tutti i post, allora ti suggerisco di utilizzare il filtro the_content
.
function append_to_content( $content ) {
global $post;
return $content.'<br />Questo post è stato salvato il '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );
