¿Cómo puedo editar los datos de la publicación antes de que se guarden?

13

Tengo un complemento y me gustaría poder ejecutar el contenido de la publicación a través de algunos filtros antes de guardarlo en la base de datos. Al mirar la api de plugin , veo que dos ganchos parecen ser útiles:

save_post
wp_insert_post

El único problema es que parece que save_post no necesita devolver una variable, por lo que 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){
    return $post_content.' <br> This post was saved on '.time();
}

Voy a hacer algo más útil que añadir una marca de tiempo, es decir, ejecutar algunos filtros de expresiones regulares, pero este es el tipo general de filtro / acción que estoy intentando agregar.

Actualizar

Tenga en cuenta que quiero interceptar los datos en su forma de guardarlos en la base de datos, no cuando se muestran en la publicación (por ejemplo: no agregando un filtro a the_content )

    
pregunta cwd 09.12.2011 - 01:41

5 respuestas

22

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 ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}
    
respondido por el Anh Tran 09.12.2011 - 15:31
4

Use el filtro content_save_pre exactamente como the_content ; la diferencia es que funciona cuando se guarda una publicación, en lugar de mostrarse.

enlace

    
respondido por el drzaus 11.12.2014 - 22:42
1

agrega el siguiente código al tema activo.

Aquí estoy reemplazando con [shell] antes de guardar.

add_filter( 'content_save_pre' , 'my_sanitize_content' , 10, 1);
function my_sanitize_content( $value ) {
          return str_replace("<shell>", "[shell]", $value );
}
    
respondido por el Suyash Jain 30.05.2016 - 14:01
1

También puedes verificar el gancho pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
    
respondido por el user28231 17.04.2018 - 20:02
0

Si solo quieres agregar algo similar al final de todas las publicaciones, te sugiero que uses el filtro the_content .

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' );
    
respondido por el Joshua Abenazer 09.12.2011 - 04:50

Lea otras preguntas en las etiquetas