• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

「関数リファレンス/wp insert post」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(全体を和訳。)
(en:Function_Reference/wp_insert_post 20:09, 27 February 2015 Itpixelz 版を反映。)
3行目: 3行目:
 
</div>
 
</div>
  
データベースに投稿を追加します。無害化や値のチェック、デフォルト値の設定なども行います。投稿オブジェクトを引数に取り、作成された投稿の ID(失敗時は0)を返します。
+
データベースへ投稿(および固定ページ)を追加します。無害化や値のチェック、デフォルト値の設定なども行います。投稿オブジェクト(配列)を引数に取り、作成された投稿の ID(失敗時は <tt>0</tt>)を返します。
  
 
<div id="Usage">
 
<div id="Usage">
9行目: 9行目:
 
</div>
 
</div>
  
  <?php wp_insert_post( $post ); ?>  
+
  <?php wp_insert_post( $post, $wp_error ); ?>
  
<div id="Examples">
+
<div id="Parameters">
== 用例 ==
+
== パラメータ ==
 
</div>
 
</div>
  
<tt>wp_insert_post()</tt> を実行する前に引数に渡す投稿オブジェクトを作成する必要があります。<tt>wp_insert_post()</tt> は未指定の値にはデフォルト値を設定しますが、タイトル,本文,抜粋のいずれかは必ず指定してください。どれも未指定の場合は、追加に失敗します。
+
{{Parameter|$post|配列&#124;オブジェクト|投稿の要素を表す配列またはオブジェクト。キーの名前は <tt>[[Database_Description#Table:_wp_posts|wp_posts]]</tt> テーブルの各フィールド名に一致させます。}}
  
データベースの <tt>wp_posts</tt> テーブルにあるフィールドを配列のキーにして値を設定:
+
<div style="border:1px solid blue; width:90%; padding:10px">
 +
'''重要''':<code>$post['ID']</code> に値を入れても、その ID の投稿は作成されません。値を入れると、その ID を持つ投稿を、<code>$post</code> で与えられた残りの値を使って更新します。つまり、新規投稿を作成するには <code>$post['ID']</code> を空文字列にするか、値を何も入れないでおく必要があります。
 +
</div>
  
<pre>
+
<code>$post</code> 配列の内容は、あなたがデフォルト値をどれだけ利用するかに応じて指定すればよいでしょう。下記は、一つの投稿に対してセットできるすべてのキーと短い説明のリストです:
// 投稿オブジェクトの作成
+
  $my_post = array();
+
  $my_post['post_title'] = 'My post';
+
  $my_post['post_content'] = 'This is my post.';
+
  $my_post['post_status'] = 'publish';
+
  $my_post['post_author'] = 1;
+
  $my_post['post_category'] = array(8,39);
+
  
// データベースに投稿を追加
 
  wp_insert_post( $my_post );
 
</pre>
 
 
投稿オブジェクトのデフォルト値:
 
 
<pre>
 
<pre>
$defaults = array(
+
$post = array(
'post_status' => 'draft',
+
  'ID'            => [ <投稿 ID> ] // 既存の投稿を更新する場合に指定。
'post_type' => 'post',
+
  'post_content'  => [ <文字列> ] // 投稿の全文。
'post_author' => $user_ID,
+
  'post_name'      => [ <文字列> ] // 投稿のスラッグ。
'ping_status' => get_option('default_ping_status'),
+
  'post_title'    => [ <文字列> ] // 投稿のタイトル。
'post_parent' => 0,
+
  'post_status'   => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | 登録済みカスタムステータス ] // 公開ステータス。デフォルトは 'draft'。
'menu_order' => 0,
+
  'post_type'     => [ 'post' | 'page' | 'link' | 'nav_menu_item' | カスタム投稿タイプ ] // 投稿タイプ。デフォルトは 'post'。
'to_ping' => '',
+
  'post_author'   => [ <ユーザー ID> ] // 作成者のユーザー ID。デフォルトはログイン中のユーザーの ID。
'pinged' => '',
+
  'ping_status'   => [ 'closed' | 'open' ] // 'open' ならピンバック・トラックバックを許可。デフォルトはオプション 'default_ping_status' の値。
'post_password' => '',
+
  'post_parent'   => [ <投稿 ID> ] // 親投稿の ID。デフォルトは 0。
'guid' => '',
+
  'menu_order'     => [ <順序値> ] // 固定ページを追加する場合、メニュー内の並び順を指定。デフォルトは 0。
'post_content_filtered' => '',
+
  'to_ping'       => // スペースまたは改行で区切った、ピンを打つ予定の URL のリスト。デフォルトは空文字列。
'post_excerpt' => '',
+
  'pinged'         => // スペースまたは改行で区切った、ピンを打った URL のリスト。デフォルトは空文字列。
'import_id' => 0);
+
  'post_password' => [ <文字列> ] // 投稿パスワード。デフォルトは空文字列。
 +
  'guid'           => // 普通はこれを指定せず WordPress に任せてください。
 +
  'post_content_filtered' => // 普通はこれを指定せず WordPress に任せてください。
 +
  'post_excerpt'   => [ <文字列> ] // 投稿の抜粋。
 +
  'post_date'     => [ Y-m-d H:i:s ] // 投稿の作成日時。
 +
  'post_date_gmt' => [ Y-m-d H:i:s ] // 投稿の作成日時(GMT)。
 +
  'comment_status' => [ 'closed' | 'open' ] // 'open' ならコメントを許可。デフォルトはオプション 'default_comment_status' の値、または 'closed'。
 +
  'post_category'  => [ array(<カテゴリー ID>, ...) ] // 投稿カテゴリー。デフォルトは空(カテゴリーなし)。
 +
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // 投稿タグ。デフォルトは空(タグなし)。
 +
  'tax_input'      => [ array( <タクソノミー> => <array | string>, ...) ] // カスタムタクソノミーとターム。デフォルトは空。
 +
  'page_template' => [ <文字列> ] // テンプレートファイルの名前、例えば template.php 等。デフォルトは空。
 +
);
 
</pre>
 
</pre>
  
===カテゴリー===
+
'''注意事項'''
カテゴリーはカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。
+
* 'post_status': 投稿ステータスに 'future' を設定するときは、WordPress が投稿をいつ公開すればよいか判るよう、未来の日付を post_date に設定してください。[[Post Status Transitions]] も見てください。
 +
* 'post_category': <code>[[関数リファレンス/wp_set_post_categories|wp_set_post_categories()]]</code> を呼び出すのと同じです。
 +
* 'tags_input': <code>[[関数リファレンス/wp_set_post_tags|wp_set_post_tags()]]</code> を呼び出すのと同じです。
 +
* 'tax_input': 配列の各要素(カスタムタクソノミーとターム)について <code>[[関数リファレンス/wp_set_post_terms|wp_set_post_terms()]]</code> を呼び出すのと同じです。ログイン中のユーザーがタクソノミーを扱う権限を持たない場合は代わりに <code>wp_set_object_terms()</code> を使う必要があります。
 +
* 'page_template': 投稿タイプが <code>'page'</code> なら、[[Page_Templates|ページテンプレート]]を設定します。失敗すると <code>WP_Error</code> または <code>0</code> を返し、この関数は最後のアクションを呼び出す前に終了します。投稿タイプが <code>'page'</code> でなければ、このパラメータは無視されます。固定ページではないものにページテンプレートを設定するには、キー <code>'_wp_page_template'</code> を指定して <code>[[関数リファレンス/update_post_meta|update_post_meta()]]</code> を呼び出します。
  
<div id="Parameters">
+
{{Parameter|$wp_error|真偽値|<tt>true</tt> にすると、失敗したときに <tt>[[クラスリファレンス/WP Error|WP_Error]]</tt> オブジェクトを返します。|オプション|<tt>false</tt>}}
== パラメータ ==
+
 
 +
<div id="Return">
 +
== 戻り値 ==
 
</div>
 
</div>
  
{{Parameter|$post|オブジェクト|投稿オブジェクト。キーの名前は <tt>wp_posts</tt> テーブルの各フィールド名と一致させます。}}
+
投稿をデータベースに追加できた場合、投稿 ID を返します。失敗すると、$wp_error が false なら <tt>0</tt> を、true なら <tt>[[クラスリファレンス/WP Error|WP_Error]]</tt> オブジェクトを返します。
  
'''重要''': <tt>$post['ID']</tt> に値を指定しても、その ID で投稿を追加することはできません。この場合は投稿の更新になります。投稿を追加する場合は、<tt>$post['ID']</tt> は未指定または空文字にしてください。
+
<div id="Example">
 +
== 用例 ==
 +
</div>
  
投稿オブジェクトに指定できる値:
+
<tt>wp_insert_post()</tt> を実行する前に、必要な投稿の要素を渡すための配列を作成する必要があります。<tt>wp_insert_post()</tt> は未指定の値にデフォルト値を設定しますが、タイトル・本文・抜粋の何れかを必ず指定してください。どれも未指定の場合は、追加に失敗します。
 +
 
 +
次の例は投稿のタイトル、本文、ステータス、作成者、カテゴリーを設定します。データベースの <tt>wp_posts</tt> テーブルにあるフィールドを配列のキーにして値を追加できます。
 
<pre>
 
<pre>
$post = array(
+
// 投稿オブジェクトを作成
   'ID' => [ <投稿 ID> ] // 既存の投稿を更新する場合。
+
$my_post = array(
  'menu_order' => [ <順序値> ] // 追加する投稿が固定ページの場合、ページの並び順を番号で指定できます。
+
   'post_title'   => 'My post',
   'comment_status' => [ 'closed' | 'open' ] // 'closed' はコメントを閉じます。
+
   'post_content' => 'This is my post.',
   'ping_status' => [ 'closed' | 'open' ] // 'closed' はピンバック/トラックバックをオフにします。
+
   'post_status'   => 'publish',
   'pinged' => [ ? ] // ピンバック済。
+
   'post_author'  => 1,
   'post_author' => [ <user ID> ] // 作成者のユーザー ID。
+
   'post_category' => array(8,39)
   'post_category' => [ array(<カテゴリー ID>, <...>) ] // カテゴリーを追加。
+
);
  'post_content' => [ <投稿の本文> ] // 投稿の全文。
+
 
  'post_date' => [ Y-m-d H:i:s ] // 投稿の作成日時。
+
// 投稿をデータベースへ追加
  'post_date_gmt' => [ Y-m-d H:i:s ] // 投稿の作成日時(GMT)。
+
wp_insert_post( $my_post );
  'post_excerpt' => [ <抜粋> ] // 投稿の抜粋。
+
  'post_name' => [ <スラッグ名> ] // 投稿スラッグ。
+
  'post_parent' => [ <投稿 ID> ] // 親投稿の ID。
+
  'post_password' => [ <投稿パスワード> ] // 投稿の閲覧時にパスワードが必要になります。
+
  'post_status' => [ 'draft' | 'publish' | 'pending'| 'future' ] // 公開ステータス。
+
  'post_title' => [ <タイトル> ] // 投稿のタイトル。
+
  'post_type' => [ 'post' | 'page' ] // 投稿タイプ名。
+
  'tags_input' => [ '<タグ>, <タグ>, <...>' ] // 投稿タグ。
+
  'to_ping' => [ ? ] //?
+
);
+
 
</pre>
 
</pre>
  
'''注1''': '''page_template''' キーは <tt>wp_post</tt> テーブルから <tt>wp_postmeta</tt> テーブルに移動しました。ページテンプレートの設定は [[関数リファレンス/update_post_meta|update_post_meta]] を使います。
+
新規投稿を追加して、その ID を返します。
 +
<pre>
 +
$post_id = wp_insert_post( $post, $wp_error );
 +
// $post_id を add_post_meta や update_post_meta に渡して利用できます
 +
</pre>
  
'''注2''': '''post_status''' は [[Post Status Transitions]] を見てください。
+
デフォルト値のリストは関数の本体で定義されていますが、次のようになっています:
 +
<pre>
 +
$defaults = array(
 +
  'post_status'           => 'draft',
 +
  'post_type'             => 'post',
 +
  'post_author'          => $user_id,
 +
  'ping_status'          => get_option( 'default_ping_status' ),
 +
  'post_parent'          => 0,
 +
  'menu_order'            => 0,
 +
  'to_ping'              => '',
 +
  'pinged'                => '',
 +
  'post_password'        => '',
 +
  'guid'                  => '',
 +
  'post_content_filtered' => '',
 +
  'post_excerpt'          => '',
 +
  'post_content'          => '',
 +
  'post_title'           => ''
 +
);
 +
</pre>
  
'''注3''': '''post_status''' に 'future' を設定する場合は、''' post_date ''' に未来の日時を設定してください。
+
<div id="Categories">
 +
== カテゴリー ==
 +
</div>
  
<div id="Return_Values">
+
カテゴリーはデータベースに登録済みのカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。
== 戻り値 ==
+
 
 +
<code>[[関数リファレンス/wp_set_post_terms|wp_set_post_terms()]]</code> も見てください。
 +
 
 +
<div id="Security">
 +
== セキュリティ ==
 
</div>
 
</div>
  
投稿をデータベースに追加できた場合は投稿の ID。追加に失敗した場合は <tt>0</tt>
+
<tt>wp_insert_post()</tt> はデータを sanitize_post() に通します。これにより、必要な無害化と検証(KSES 等)を実行します。
 +
 
 +
従って、心配する必要はありません。
 +
 
 +
しかし、投稿タイトルや他のフィールドから、HTML や JavaScript や PHP タグを除去したいと思うかもしれません。驚くべきことに、WordPress はこれを自動的には行いませんが、<code>wp_strip_all_tags()</code> 関数を使えば簡単に実行できます。またフロントエンドに投稿入力フォームを作るときにとても役立ちます。
 +
 
 +
<pre>
 +
// 投稿オブジェクトを作成
 +
$my_post = array(
 +
  'post_title'    => wp_strip_all_tags( $_POST['post_title'] ),
 +
  'post_content'  => $_POST['post_content'],
 +
  'post_status'  => 'publish',
 +
  'post_author'  => 1,
 +
  'post_category' => array( 8,39 )
 +
);
 +
 
 +
// 投稿をデータベースへ追加
 +
wp_insert_post( $my_post );
 +
</pre>
  
 
<div id="Change_Log">
 
<div id="Change_Log">
108行目: 155行目:
 
</div>
 
</div>
  
<tt>wp_insert_post()</tt> は {{Trac|wp-includes/post.php}} に含まれています。
+
<tt>wp_insert_post()</tt> は {{Trac|wp-includes/post.php}} にあります。
  
 
<div id="Related">
 
<div id="Related">
114行目: 161行目:
 
</div>
 
</div>
  
[[関数リファレンス/wp update post|wp_update_post()]], [[関数リファレンス/wp delete post|wp_delete_post()]], [[関数リファレンス/wp publish post|wp_publish_post()]], [[関数リファレンス/wp delete attachment|wp_delete_attachment()]],
+
[[関数リファレンス/wp update post|wp_update_post()]],  
 +
[[関数リファレンス/wp delete post|wp_delete_post()]],  
 +
[[関数リファレンス/wp publish post|wp_publish_post()]],  
 +
[[関数リファレンス/wp delete attachment|wp_delete_attachment()]]/[[:en:Function Reference/wp delete attachment|en]],
 
[[関数リファレンス/wp get attachment url|wp_get_attachment_url()]],
 
[[関数リファレンス/wp get attachment url|wp_get_attachment_url()]],
[[関数リファレンス/wp insert attachment|wp_insert_attachment()]]
+
[[関数リファレンス/wp insert attachment|wp_insert_attachment()]]/[[:en:Function Reference/wp insert attachment|en]],
 +
[[プラグイン API/フィルターフック一覧/wp insert post data|wp_insert_post_data()]]/[[:en:Plugin API/Filter Reference/wp insert post data|en]]
 +
 
 
{{Tag Footer}}
 
{{Tag Footer}}
{{原文|Function Reference/wp insert post|86485}}<!-- 08:50, 27 April 2010 Solenoid -->
+
 
[[Category:Functions]]
+
{{原文|Function Reference/wp insert post|149850}} <!-- 20:09, 27 February 2015 Itpixelz 版 -->
[[Category:New page created]]
+
 
[[en:Function Reference/wp insert post]]
+
{{DEFAULTSORT:Wp_insert_post}}
 +
[[Category:関数]]
 +
 
 +
[[en:Function_Reference/wp_insert_post]]
 +
[[ru:Справочник по функциям/wp insert post]]
 
[[tr:Fonksiyon Listesi/wp insert post]]
 
[[tr:Fonksiyon Listesi/wp insert post]]
 +
[[zh-hans:函数参考/wp_insert_post]]

2015年4月13日 (月) 23:48時点における版

データベースへ投稿(および固定ページ)を追加します。無害化や値のチェック、デフォルト値の設定なども行います。投稿オブジェクト(配列)を引数に取り、作成された投稿の ID(失敗時は 0)を返します。

使い方

<?php wp_insert_post( $post, $wp_error ); ?>

パラメータ

$post
配列|オブジェクト) (必須) 投稿の要素を表す配列またはオブジェクト。キーの名前は wp_posts テーブルの各フィールド名に一致させます。
初期値: なし

重要$post['ID'] に値を入れても、その ID の投稿は作成されません。値を入れると、その ID を持つ投稿を、$post で与えられた残りの値を使って更新します。つまり、新規投稿を作成するには $post['ID'] を空文字列にするか、値を何も入れないでおく必要があります。

$post 配列の内容は、あなたがデフォルト値をどれだけ利用するかに応じて指定すればよいでしょう。下記は、一つの投稿に対してセットできるすべてのキーと短い説明のリストです:

$post = array(
  'ID'             => [ <投稿 ID> ] // 既存の投稿を更新する場合に指定。
  'post_content'   => [ <文字列> ] // 投稿の全文。
  'post_name'      => [ <文字列> ] // 投稿のスラッグ。
  'post_title'     => [ <文字列> ] // 投稿のタイトル。
  'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | 登録済みカスタムステータス ] // 公開ステータス。デフォルトは 'draft'。
  'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | カスタム投稿タイプ ] // 投稿タイプ。デフォルトは 'post'。
  'post_author'    => [ <ユーザー ID> ] // 作成者のユーザー ID。デフォルトはログイン中のユーザーの ID。
  'ping_status'    => [ 'closed' | 'open' ] // 'open' ならピンバック・トラックバックを許可。デフォルトはオプション 'default_ping_status' の値。
  'post_parent'    => [ <投稿 ID> ] // 親投稿の ID。デフォルトは 0。
  'menu_order'     => [ <順序値> ] // 固定ページを追加する場合、メニュー内の並び順を指定。デフォルトは 0。
  'to_ping'        => // スペースまたは改行で区切った、ピンを打つ予定の URL のリスト。デフォルトは空文字列。
  'pinged'         => // スペースまたは改行で区切った、ピンを打った URL のリスト。デフォルトは空文字列。
  'post_password'  => [ <文字列> ] // 投稿パスワード。デフォルトは空文字列。
  'guid'           => // 普通はこれを指定せず WordPress に任せてください。
  'post_content_filtered' => // 普通はこれを指定せず WordPress に任せてください。
  'post_excerpt'   => [ <文字列> ] // 投稿の抜粋。
  'post_date'      => [ Y-m-d H:i:s ] // 投稿の作成日時。
  'post_date_gmt'  => [ Y-m-d H:i:s ] // 投稿の作成日時(GMT)。
  'comment_status' => [ 'closed' | 'open' ] // 'open' ならコメントを許可。デフォルトはオプション 'default_comment_status' の値、または 'closed'。
  'post_category'  => [ array(<カテゴリー ID>, ...) ] // 投稿カテゴリー。デフォルトは空(カテゴリーなし)。
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // 投稿タグ。デフォルトは空(タグなし)。
  'tax_input'      => [ array( <タクソノミー> => <array | string>, ...) ] // カスタムタクソノミーとターム。デフォルトは空。
  'page_template'  => [ <文字列> ] // テンプレートファイルの名前、例えば template.php 等。デフォルトは空。
);  

注意事項

  • 'post_status': 投稿ステータスに 'future' を設定するときは、WordPress が投稿をいつ公開すればよいか判るよう、未来の日付を post_date に設定してください。Post Status Transitions も見てください。
  • 'post_category': wp_set_post_categories() を呼び出すのと同じです。
  • 'tags_input': wp_set_post_tags() を呼び出すのと同じです。
  • 'tax_input': 配列の各要素(カスタムタクソノミーとターム)について wp_set_post_terms() を呼び出すのと同じです。ログイン中のユーザーがタクソノミーを扱う権限を持たない場合は代わりに wp_set_object_terms() を使う必要があります。
  • 'page_template': 投稿タイプが 'page' なら、ページテンプレートを設定します。失敗すると WP_Error または 0 を返し、この関数は最後のアクションを呼び出す前に終了します。投稿タイプが 'page' でなければ、このパラメータは無視されます。固定ページではないものにページテンプレートを設定するには、キー '_wp_page_template' を指定して update_post_meta() を呼び出します。
$wp_error
真偽値) (オプションtrue にすると、失敗したときに WP_Error オブジェクトを返します。
初期値: false

戻り値

投稿をデータベースに追加できた場合、投稿 ID を返します。失敗すると、$wp_error が false なら 0 を、true なら WP_Error オブジェクトを返します。

用例

wp_insert_post() を実行する前に、必要な投稿の要素を渡すための配列を作成する必要があります。wp_insert_post() は未指定の値にデフォルト値を設定しますが、タイトル・本文・抜粋の何れかを必ず指定してください。どれも未指定の場合は、追加に失敗します。

次の例は投稿のタイトル、本文、ステータス、作成者、カテゴリーを設定します。データベースの wp_posts テーブルにあるフィールドを配列のキーにして値を追加できます。

// 投稿オブジェクトを作成
$my_post = array(
  'post_title'    => 'My post',
  'post_content'  => 'This is my post.',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array(8,39)
);

// 投稿をデータベースへ追加
wp_insert_post( $my_post );

新規投稿を追加して、その ID を返します。

$post_id = wp_insert_post( $post, $wp_error );
// $post_id を add_post_meta や update_post_meta に渡して利用できます

デフォルト値のリストは関数の本体で定義されていますが、次のようになっています:

$defaults = array(
  'post_status'           => 'draft',
  'post_type'             => 'post',
  'post_author'           => $user_id,
  'ping_status'           => get_option( 'default_ping_status' ),
  'post_parent'           => 0,
  'menu_order'            => 0,
  'to_ping'               => '',
  'pinged'                => '',
  'post_password'         => '',
  'guid'                  => '',
  'post_content_filtered' => '',
  'post_excerpt'          => '',
  'post_content'          => '',
  'post_title'            => ''
);

カテゴリー

カテゴリーはデータベースに登録済みのカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。

wp_set_post_terms() も見てください。

セキュリティ

wp_insert_post() はデータを sanitize_post() に通します。これにより、必要な無害化と検証(KSES 等)を実行します。

従って、心配する必要はありません。

しかし、投稿タイトルや他のフィールドから、HTML や JavaScript や PHP タグを除去したいと思うかもしれません。驚くべきことに、WordPress はこれを自動的には行いませんが、wp_strip_all_tags() 関数を使えば簡単に実行できます。またフロントエンドに投稿入力フォームを作るときにとても役立ちます。

// 投稿オブジェクトを作成
$my_post = array(
  'post_title'    => wp_strip_all_tags( $_POST['post_title'] ),
  'post_content'  => $_POST['post_content'],
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array( 8,39 )
);

// 投稿をデータベースへ追加
wp_insert_post( $my_post );

変更履歴

ソースファイル

wp_insert_post()wp-includes/post.php にあります。

wp_update_post(), wp_delete_post(), wp_publish_post(), wp_delete_attachment()/en, wp_get_attachment_url(), wp_insert_attachment()/en, wp_insert_post_data()/en


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Function Reference/wp insert post最新版との差分