web-dev-qa-db-ja.com

マスター投稿が更新された場合にのみ、プログラムで投稿を作成するためにどのフックを使用すべきですか?

PippinJean-Baptiste Jung には、プログラム的なチュートリアルがありますこれら4つのアクションフックを使用して新しい投稿が公開されたときにコンテンツを作成する...

  • {post_type}を公開
  • add_action( 'new_to_publish_ {post_type}、
  • add_action( 'draft_to_publish_ {post_type}、
  • add_action( 'pending_to_publish_ {post_type}

...このスクリプトを実行する...

global $user_ID;
$new_post = array(
    'post_title' => 'My New Post',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

投稿が更新されたときにこの関数のみを実行するために使用するフックは何ですか?ありがとうございました!

2
torinagrippa

あなたはpre_post_updateアクションフックをそのように使うことができます:

add_action('pre_post_update','post_updating_callback');
function post_updating_callback($post_id){
    global $post;
    // verify if this is an auto save routine. 
    // If it is our form has not been submitted, so we dont want to do anything
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return;
    if ($post->post_status == "publish"){
        //do update stuff here.
    }
}

更新:

wp_insert_post()の代わりにwp_update_postを次のように使用してください。

//first get the original post
$postarr = get_post($post_id,'ARRAY_A');

//then set the fields you want to update
$postarr['post_title'] = "new title";
$postarr['post_content'] = "new edited content";

$post_id = wp_update_post($postarr);

この方法では、更新されたフィールドを指定するだけでよく、元の投稿タイプなどのことを心配する必要はありません。

8
Bainternet

この2人はあなたの友達かもしれません。

add_action('edit_post','your_action');

add_action('pre_post_update','your_action');

参照: アクションリファレンス:投稿、ページ、添付ファイル、カテゴリのアクション 詳細については...

PS。コンテキストに依存しますが、代わりに wp_update_post を使用することも検討してください wp_insert_post

2
Michal Mau