¿Cómo puedo editar los datos de una entrada antes de que se guarde?
Tengo un plugin y me gustaría poder procesar el contenido de la entrada a través de algunos filtros antes de que se guarde en la base de datos. Mirando la API del plugin, veo dos hooks que parecen que podrían ser útiles:
save_post
wp_insert_post
El único problema es que parece que save_post
no necesita devolver una variable, y por lo tanto no sé cómo filtrar el contenido, y wp_insert_post
parece documentado.
Me gustaría hacer algo como esto:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
// Devuelve el contenido con una marca de tiempo añadida
return $post_content.' <br> Esta entrada fue guardada el '.time();
}
Voy a hacer algo más útil que añadir una marca de tiempo, específicamente ejecutar algunos filtros regex, pero este es el tipo general de filtro/acción que estoy tratando de añadir.
Actualización
Por favor, ten en cuenta que quiero interceptar los datos cuando se están guardando en la base de datos - no cuando se están mostrando en la entrada (por ejemplo: No añadiendo un filtro a the_content
)

El filtro wp_insert_post_data puede hacer eso:
add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
// Cambiar el título del post
$data['post_title'] .= '_sufijo';
return $data;
}

me puso en el camino correcto, gracias. Creo que en realidad necesitas usar add_action
en lugar de add_filter
. Además, tu wpse35931_filter_post_data
y filter_handler
son incongruentes...

Definitivamente es un filtro. Aunque los filtros y las acciones se basan en la misma funcionalidad que permite cierto cruce. Sin embargo, si usas esto como una acción, no podrás devolver los datos, lo que eliminaría todo el propósito. Quieres FILTRAR los datos y luego devolverlos.

wp_insert_post_data
funciona, pero es un poco excesivo para lo que OP (y quizás otros) quieren lograr. Una opción más simple en esta situación es content_save_pre
como recomendó @drzaus.

Documentación para desarrolladores del filtro wp_insert_post_data
: https://developer.wordpress.org/reference/hooks/wp_insert_post_data/

¿Se llama a este hook cuando: a) llamas manualmente a wp_insert_post() en, por ejemplo, functions.php de tu tema para insertar/actualizar un post O b) cada vez que un post se guarda por cualquier medio posible (ej. a través del backend, a través del frontend, de otra manera...)?

Utiliza el filtro content_save_pre
de la misma manera que the_content
— la diferencia es que opera cuando un post es guardado, en lugar de cuando se muestra.
http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

Según https://developer.wordpress.org/reference/hooks/pre_post_update/, pre_post_update
solo se llama en actualizaciones, no en creaciones.

Si solo deseas agregar algo similar al final de todas las publicaciones, entonces te sugiero que utilices el filtro the_content
.
function append_to_content( $content ) {
global $post;
return $content.'<br />Esta publicación fue guardada el '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );
