Como posso editar os dados da postagem antes que eles sejam salvos?

13

Eu tenho um plug-in e gostaria de poder executar o conteúdo da postagem por meio de alguns filtros antes que ele seja salvo no banco de dados. Ao olhar para a API do plug-in , vejo que dois ganchos parecem ser úteis:

save_post
wp_insert_post

O único problema é que parece que save_post não precisa retornar uma variável e, portanto, não sei como filtrar o conteúdo e wp_insert_post parece documentado.

Eu gostaria de fazer algo assim:

add_action('whatever_hook_name','my_function');

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

Vou fazer algo mais útil do que acrescentar um timestamp, ou seja, executar alguns filtros regex, mas esse é o tipo geral de filtro / ação que estou tentando adicionar.

Atualizar

Por favor, note que eu quero interceptar os dados em sua maneira de ser salvo no banco de dados - não quando ele está sendo exibido no post (por exemplo: Não adicionando um filtro para the_content )

    
por cwd 09.12.2011 / 01:41

5 respostas

22

O filtro wp_insert_post_data pode fazer isso:

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;
}
    
por Anh Tran 09.12.2011 / 15:31
4

Use o filtro content_save_pre exatamente como the_content - a diferença é que ele opera quando uma postagem é salva, em vez de exibida.

enlace

    
por drzaus 11.12.2014 / 22:42
1

adicione o seguinte código ao tema ativo.

Aqui estou substituindo por [shell] antes de salvar.

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

Você também pode verificar o gancho pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
    
por user28231 17.04.2018 / 20:02
0

Se você quiser apenas adicionar algo semelhante ao final de todas as postagens, sugiro usar o 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' );
    
por Joshua Abenazer 09.12.2011 / 04:50