最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

plugins - How can I edit post data before it is saved?

programmeradmin0浏览0评论

I have a plugin and I would like to be able to run the post content through some filters before it is saved to the database. From looking at the plugin api, I see that two hooks that look like they might be helpful:

save_post
wp_insert_post

The only problem is that it looks like save_post does not need return a variable, and so I don't know how to filter the content, and wp_insert_post looks documented.

I'd like to do something like this:

add_action('whatever_hook_name','my_function');

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

I am going to do something more useful than append a timestamp, namely running some regex filters, but this is the general type of filter / action I'm trying to add.

Update

Please note that I want to intercept the data on it's way to being saved in the database - not when it is being displayed in the post (eg: Not by adding a filter to the_content)

I have a plugin and I would like to be able to run the post content through some filters before it is saved to the database. From looking at the plugin api, I see that two hooks that look like they might be helpful:

save_post
wp_insert_post

The only problem is that it looks like save_post does not need return a variable, and so I don't know how to filter the content, and wp_insert_post looks documented.

I'd like to do something like this:

add_action('whatever_hook_name','my_function');

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

I am going to do something more useful than append a timestamp, namely running some regex filters, but this is the general type of filter / action I'm trying to add.

Update

Please note that I want to intercept the data on it's way to being saved in the database - not when it is being displayed in the post (eg: Not by adding a filter to the_content)

Share Improve this question edited Dec 9, 2011 at 14:25 cwd asked Dec 9, 2011 at 0:41 cwdcwd 1,8625 gold badges27 silver badges44 bronze badges 1
  • Note: You have a bad design :-) 1. everytime post would be saved, this string would be appended. (if you don't delete the previous one, you get a lot's of "This post was..."s 2. data such this one should be stored as a meta value of the post :-) BTW: save_post is called after data was saved, therefore after it was saved to database (not what you want). – jave.web Commented Jan 20, 2017 at 17:56
Add a comment  | 

5 Answers 5

Reset to default 44

The wp_insert_post_data filter can do that:

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

Use filter content_save_pre exactly like the_content -- the difference is that it operates when a post is saved, rather than displayed.

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

You can also check for the hook pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

Add the following code to the active theme to replace <shell> with [shell] before saving:

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

If you just want to add something similar at the end of all the posts, then I would suggest you use the the_content filter.

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' );
发布评论

评论列表(0)

  1. 暂无评论