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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(全体を和訳。)
(en:Function_Reference/wp_update_post 15:22, 31 March 2015 Hotwebideas 版を反映。)
 
3行目: 3行目:
 
</div>
 
</div>
  
データベースの投稿を更新します。更新する投稿の ID を指定してください。投稿が ''更新'' されると、以前の投稿はリビジョンとして保存されます。カテゴリー,カスタムフィールドなどの関連情報は更新された新しい投稿に紐付けされます。
+
データベースにある投稿(および固定ページ)を更新します。更新したい投稿の ID を指定してください。
 +
 
 +
'''参考:'''投稿が''更新''されるとき、以前の投稿は複製され、リビジョンとして保存されます。そして新しい値を使って投稿が更新されます。カテゴリーやカスタムフィールド等の関連情報は更新された新しい投稿に紐付けられます。
  
 
<div id="Usage">
 
<div id="Usage">
 
== 使い方 ==
 
== 使い方 ==
 
</div>
 
</div>
+
 
  <?php wp_update_post( $post ); ?>
+
  <?php wp_update_post( $post, $wp_error ); ?>
  
 
<div id="Parameters">
 
<div id="Parameters">
15行目: 17行目:
 
</div>
 
</div>
  
<tt>wp_update_post()</tt> を実行する前に引数に渡す投稿情報を作成する必要があります。[[関数リファレンス/wp insert post|wp_insert_post()]] とは異なり、投稿 ID を指定する必要があります。
+
{{Parameter|$post|配列&#124;オブジェクト|投稿の要素を表す配列またはオブジェクト。配列の場合は値がエスケープされていること。投稿オブジェクトの場合はエスケープの必要はありません。キーの名前は <tt>[[Database_Description#Table:_wp_posts|wp_posts]]</tt> テーブルの各フィールド名に一致させます。ID フィールドの指定は必須ではありませんが、指定しないならこの関数を使う意味はありません。|オプション|空の配列}}
 +
 
 +
{{Parameter|$wp_error|真偽値|失敗したときに返す値を制御します。デフォルト設定(<tt>false</tt>)では、投稿の更新に失敗すると <tt>0</tt> を返します。<tt>true</tt> にすると、<tt>[[クラスリファレンス/WP Error|WP_Error]]</tt> オブジェクトを返します。|オプション|<tt>false</tt>}}
 +
 
 +
<div id="Example">
 +
== 用例 ==
 +
</div>
 +
 
 +
<tt>wp_update_post()</tt> を実行する前に、必要な投稿の要素を渡すための配列を作成する必要があります。<tt>[[関数リファレンス/wp insert post|wp_insert_post()]]</tt> とは異なり、投稿 ID と更新したい要素だけを指定すれば充分です。要素の名前はデータベースのフィールド名に一致させます。
  
 
<pre>
 
<pre>
// ID が37の投稿を更新します
+
<?php
   $my_post = array();
+
// ID が 37 の投稿を更新
  $my_post['ID'] = 37;
+
   $my_post = array(
   $my_post['post_content'] = 'これの本文は更新されました。';
+
      'ID'           => 37,
 +
      'post_title'   => 'これが投稿のタイトル。',
 +
      'post_content' => 'これが更新されたコンテンツ。',
 +
  );
  
// データベースの投稿情報を更新
+
// データベースにある投稿を更新する
 
   wp_update_post( $my_post );
 
   wp_update_post( $my_post );
 +
?>
 
</pre>
 
</pre>
  
===カテゴリー===
+
<strong>$wp_error の処理</strong>
カテゴリーはカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。
+
  
<div id="Parameters">
+
更新が行われないとき、エラーが起きているかもしれません。<tt>$wp_error</tt> に <tt>true</tt> をセットして、実行直後にエラーを表示するとよいでしょう。
== パラメータ ==
+
<pre>
 +
<?php
 +
// これは開発環境のみで使用します。本番サイトへ移行するときはコメントアウトするか削除します。
 +
 
 +
$post_id = wp_update_post( $current_item, true );
 +
if ( is_wp_error( $post_id ) ) {
 +
$errors = $post_id->get_error_messages();
 +
foreach ( $errors as $error ) {
 +
echo $error;
 +
}
 +
}
 +
?>
 +
</pre>
 +
 
 +
<div id="Categories">
 +
=== カテゴリー ===
 
</div>
 
</div>
  
{{Parameter|$post|配列またはオブジェクト|配列の場合は値がエスケープされていること。投稿オブジェクトの場合はエスケープの必要はありません。キーの名前は <tt>wp_posts</tt> テーブルの各フィールド名と一致させます。投稿 ID が未指定の場合は更新ではなく追加になります。|オプション|空の配列}}
+
カテゴリーはデータベースに登録済みのカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。
  
<div id="Return_Values">
+
<div id="Caution_-_Infinite_loop">
 +
=== 無限ループに関する警告 ===
 +
</div>
 +
 
 +
<tt>wp_update_post()</tt> を <tt>save_post</tt> にフックしたアクションの中で実行すると(例:カスタムメタボックス)、無限ループを引き起こす可能性があります。それは、まず <tt>wp_update_post()</tt> によって <tt>save_post</tt> フックが実行され、さらにリビジョンが有効になっていると 2 回目の <tt>save_post</tt> が実行されます(1 回目はリビジョンを作成するとき、続けてオリジナルの投稿を更新するとき &mdash; こうして無限ループに至ります)。
 +
 
 +
もし <tt>save_post</tt> から呼び出されるコードの中で投稿を更新する場合は、投稿タイプ(<tt>post_type</tt>)が <tt>'revision'</tt> ではなく、<tt>$post</tt> オブジェクトが本当に更新すべきものであることを確認してください。
 +
 
 +
同様に、<tt>edit_attachment</tt> にフックしたアクションも無限ループを引き起こす可能性があります。それは、パラメータの <tt>"ID"</tt> に添付ファイルの ID を指定して <tt>wp_update_post</tt> を実行する場合です。
 +
 
 +
'''参考:'''フックをいったん削除してから改めて追加してください。このコードは <tt>[[プラグイン API/アクションフック一覧/save post|save_post]]</tt>/[[:en:Plugin_API/Action_Reference/save_post|en]] の用例を少し変えたものです。
 +
 
 +
<pre>
 +
<?php
 +
function my_function( $post_id ){
 +
if ( ! wp_is_post_revision( $post_id ) ) {
 +
 +
// この関数をフックから外し、無限ループを防ぐ。
 +
remove_action( 'save_post', 'my_function' );
 +
 +
// 投稿を更新する。save_post がもう一度実行される。
 +
wp_update_post( $my_args );
 +
 
 +
// この関数を改めてフックする。
 +
add_action( 'save_post', 'my_function' );
 +
}
 +
}
 +
add_action( 'save_post', 'my_function' );
 +
?>
 +
</pre>
 +
 
 +
<div id="Scheduling_posts">
 +
=== スケジュール投稿 ===
 +
</div>
 +
 
 +
<tt>wp_update_post()</tt> を使って下書きをスケジュール投稿する場合、パラメータに <tt>$my_post->edit_date = true</tt> を含めないと投稿されません。<tt>edit_date</tt> が true でなければ WordPress は <tt>post_date</tt> を無視します。
 +
 
 +
<div id="Return">
 
== 戻り値 ==
 
== 戻り値 ==
 
</div>
 
</div>
  
投稿の更新が成功した場合は投稿 ID。失敗した場合は <tt>0</tt>
+
{{Return||整数&#124;オブジェクト|更新に成功すると投稿 ID を、失敗すると <tt>0</tt> または WP_Error オブジェクトを返します。}}
  
 
<div id="Change_Log">
 
<div id="Change_Log">
 
== 変更履歴 ==
 
== 変更履歴 ==
 
</div>
 
</div>
 
+
* [[Version 1.0|1.0.0]] : 新規導入
* [[Version 1.0|バージョン 1.0]] : 新規導入
+
  
 
<div id="Source_File">
 
<div id="Source_File">
52行目: 116行目:
 
</div>
 
</div>
  
<tt>wp_update_post()</tt> は {{Trac|wp-includes/post.php}} に含まれています。
+
<tt>wp_update_post()</tt> は {{Trac|wp-includes/post.php}} にあります。
  
 
<div id="Related">
 
<div id="Related">
59行目: 123行目:
  
 
[[関数リファレンス/wp insert post|wp_insert_post()]]
 
[[関数リファレンス/wp insert post|wp_insert_post()]]
 +
 
{{Tag Footer}}
 
{{Tag Footer}}
{{原文|Function Reference/wp update post|85036}}<!-- 05:40, 31 March 2010 Bennebw -->
+
 
[[Category:Functions]]
+
{{原文|Function Reference/wp update post|150477}} <!-- 15:22, 31 March 2015 Hotwebideas 版 -->
[[Category:New page created]]
+
 
[[en:Function Reference/wp update post]]
+
{{DEFAULTSORT:Wp_update_post}}
 +
[[Category:関数]]
 +
 
 +
[[en:Function_Reference/wp_update_post]]
 +
[[tr:Fonksiyon Listesi/wp update post]]

2015年4月13日 (月) 17:43時点における最新版

データベースにある投稿(および固定ページ)を更新します。更新したい投稿の ID を指定してください。

参考:投稿が更新されるとき、以前の投稿は複製され、リビジョンとして保存されます。そして新しい値を使って投稿が更新されます。カテゴリーやカスタムフィールド等の関連情報は更新された新しい投稿に紐付けられます。

使い方

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

パラメータ

$post
配列|オブジェクト) (オプション) 投稿の要素を表す配列またはオブジェクト。配列の場合は値がエスケープされていること。投稿オブジェクトの場合はエスケープの必要はありません。キーの名前は wp_posts テーブルの各フィールド名に一致させます。ID フィールドの指定は必須ではありませんが、指定しないならこの関数を使う意味はありません。
初期値: 空の配列
$wp_error
真偽値) (オプション) 失敗したときに返す値を制御します。デフォルト設定(false)では、投稿の更新に失敗すると 0 を返します。true にすると、WP_Error オブジェクトを返します。
初期値: false

用例

wp_update_post() を実行する前に、必要な投稿の要素を渡すための配列を作成する必要があります。wp_insert_post() とは異なり、投稿 ID と更新したい要素だけを指定すれば充分です。要素の名前はデータベースのフィールド名に一致させます。

<?php
// ID が 37 の投稿を更新
  $my_post = array(
      'ID'           => 37,
      'post_title'   => 'これが投稿のタイトル。',
      'post_content' => 'これが更新されたコンテンツ。',
  );

// データベースにある投稿を更新する
  wp_update_post( $my_post );
?>

$wp_error の処理

更新が行われないとき、エラーが起きているかもしれません。$wp_errortrue をセットして、実行直後にエラーを表示するとよいでしょう。

<?php
// これは開発環境のみで使用します。本番サイトへ移行するときはコメントアウトするか削除します。

$post_id = wp_update_post( $current_item, true );
if ( is_wp_error( $post_id ) ) {
	$errors = $post_id->get_error_messages();
	foreach ( $errors as $error ) {
		echo $error;
	}
}
?>

カテゴリー

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

無限ループに関する警告

wp_update_post()save_post にフックしたアクションの中で実行すると(例:カスタムメタボックス)、無限ループを引き起こす可能性があります。それは、まず wp_update_post() によって save_post フックが実行され、さらにリビジョンが有効になっていると 2 回目の save_post が実行されます(1 回目はリビジョンを作成するとき、続けてオリジナルの投稿を更新するとき — こうして無限ループに至ります)。

もし save_post から呼び出されるコードの中で投稿を更新する場合は、投稿タイプ(post_type)が 'revision' ではなく、$post オブジェクトが本当に更新すべきものであることを確認してください。

同様に、edit_attachment にフックしたアクションも無限ループを引き起こす可能性があります。それは、パラメータの "ID" に添付ファイルの ID を指定して wp_update_post を実行する場合です。

参考:フックをいったん削除してから改めて追加してください。このコードは save_post/en の用例を少し変えたものです。

<?php
function my_function( $post_id ){
	if ( ! wp_is_post_revision( $post_id ) ) {
	
		// この関数をフックから外し、無限ループを防ぐ。
		remove_action( 'save_post', 'my_function' );
	
		// 投稿を更新する。save_post がもう一度実行される。
		wp_update_post( $my_args );

		// この関数を改めてフックする。
		add_action( 'save_post', 'my_function' );
	}
}
add_action( 'save_post', 'my_function' );
?>

スケジュール投稿

wp_update_post() を使って下書きをスケジュール投稿する場合、パラメータに $my_post->edit_date = true を含めないと投稿されません。edit_date が true でなければ WordPress は post_date を無視します。

戻り値

(整数|オブジェクト) 
更新に成功すると投稿 ID を、失敗すると 0 または WP_Error オブジェクトを返します。

変更履歴

ソースファイル

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

wp_insert_post()


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


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