web-dev-qa-db-ja.com

投稿データを保存する前に編集するにはどうすればよいですか。

私はプラグインを持っています、そしてそれがデータベースに保存される前に私はいくつかのフィルタを通して投稿内容を走らせることができたいです。 plugin api を見ると、2つのフックが役に立つことがわかります。

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

私はタイムスタンプを追加するよりももっと便利なことをするつもりです。すなわち、いくつかの正規表現フィルタを実行することですが、これは私が追加しようとしているフィルタ/アクションの一般的なタイプです。

更新

データが投稿に表示されているときではなく、データベースに保存される途中でデータを傍受したいことに注意してください(例:the_contentにフィルタを追加することによってではありません)

17
cwd

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;
}
25
Anh Tran

content_save_preとまったく同じようにfilter the_contentを使用してください - 違いは、表示されるのではなく投稿が保存されるときに動作することです。

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

6
drzaus

フックpre_post_updateもチェックできます

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
2
user28231

次のコードをアクティブなテーマに追加して、保存する前に<Shell>[Shell]に置き換えます。

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

すべての投稿の最後に似たようなものを追加したいだけであれば、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' );
0
Joshua Abenazer