如何在保存发布数据之前对其进行编辑?

时间:2011-12-09 作者:cwd

我有一个插件,我希望能够在将帖子内容保存到数据库之前,通过一些过滤器运行帖子内容。从查看plugin api, 我看到两个看起来很有用的钩子:

save_post
wp_insert_post
唯一的问题是save_post 不需要返回变量,因此我不知道如何过滤内容wp_insert_post 外观记录在案。

我想这样做:

add_action(\'whatever_hook_name\',\'my_function\');

function my_function($post_content){
    return $post_content.\' <br> This post was saved on \'.time();
}
我将做一些比附加时间戳更有用的事情,即运行一些regex过滤器,但这是我试图添加的一般类型的过滤器/操作。

Update

请注意,我想截取保存在数据库中的数据,而不是在帖子中显示数据时截取数据(例如:不是通过在the_content)

5 个回复
最合适的回答,由SO网友:Anh Tran 整理而成

这个wp_insert_post_data 过滤器可以做到:

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;
}

SO网友:drzaus

使用筛选器content_save_pre 一模一样the_content -- 不同之处在于,它在保存帖子时运行,而不是在显示帖子时运行。

http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

SO网友:Centarius

您也可以检查挂钩pre_post_update

add_action(\'pre_post_update\', \'before_data_is_saved_function\');

function before_data_is_saved_function($post_id) {

}

SO网友:Suyash Jain

将以下代码添加到活动主题以替换<shell> 具有[shell] 保存前:

 add_filter(\'content_save_pre\', \'my_sanitize_content\', 10, 1);
 function my_sanitize_content($value) {
   return str_replace(\'<shell>\', \'[shell]\', $value);
 }

SO网友:Joshua Abenazer

如果您只想在所有帖子的末尾添加类似的内容,那么我建议您使用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\' );

结束