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


19

プラグインがあり、データベースに保存する前にいくつかのフィルターを介して投稿コンテンツを実行できるようにしたいと思います。見てから、プラグイン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


注:デザインが悪い:-) 1.投稿が保存されるたびに、この文字列が追加されます。(あなたが以前のものを削除しない場合、あなたはたくさんの"の取得This post was...「■2.データは、この1つはポストのメタ値として格納する必要があります:-)ところで:save_post呼び出された後にデータが保存されたので、後にそれデータベースに保存されました(必要なものではありません)。
jave.web

回答:


29

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

2
正しい方向に進んでくれた、ありがとう。のadd_action代わりに実際に使用する必要があると思いますadd_filter。また、あなたwpse35931_filter_post_datafilter_handler一致しないです...
CWD

1
これは間違いなくフィルターです。ただし、フィルターとアクションは、クロスオーバーを許可する同じ機能に基づいています。ただし、これをアクションとして使用すると、ポイント全体を削除するデータを返すことができなくなります。データをフィルタリングしてから返したい場合。
ジェイク

2
wp_insert_post_data動作しますが、OP(およびおそらく他の人)が達成したいことには少し圧倒されます。この状況でのより単純なオプションはcontent_save_pre、@ drzausで推奨されているとおりです。
rinogo

1
wp_insert_post_dataフィルターの開発者ドキュメント:developer.wordpress.org/reference/hooks/wp_insert_post_data
jave.web

このフックは、a)投稿を挿入/更新するためにテーマのfunctions.phpなどで手動でwp_insert_post()を呼び出すか、b)可能な手段(たとえば、バックエンド、フロントエンド)で投稿が保存されるたびに呼び出されますか、どういうわけか...)?
ヴァディムH


2

フックを確認することもできます pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

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

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

0

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

ありがとう、実際にデータベースに保存する前にデータを編集したい。
cwd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.