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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(en:Function Reference/wp update post 05:40, 31 March 2010 Bennebw)
 
(en:Function_Reference/wp_update_post 15:22, 31 March 2015 Hotwebideas 版を反映。)
 
(他の1人の利用者による、間の1版が非表示)
1行目: 1行目:
==Description==
+
<div id="Description">
This function updates posts (and pages) in the database. To work as expected, it is necessary to pass the ID of the post to be updated.
+
== 説明 ==
 +
</div>
  
Note that when the post is "updated", the existing Post record is duplicated for audit/revision purposes.  The primary record is then updated with the new values. Category associations, custom fields, post meta, and other related entries continue to be linked to the primary Post record.
+
データベースにある投稿(および固定ページ)を更新します。更新したい投稿の ID を指定してください。
  
==Usage==
+
'''参考:'''投稿が''更新''されるとき、以前の投稿は複製され、リビジョンとして保存されます。そして新しい値を使って投稿が更新されます。カテゴリーやカスタムフィールド等の関連情報は更新された新しい投稿に紐付けられます。
%%% <?php wp_update_post( $post ); ?> %%%
+
  
==Example==
+
<div id="Usage">
Before calling wp_update_post() it is necessary to create an array to pass the necessary elements. Unlike [[Function Reference/wp insert post|wp_insert_post()]], it is only necessary to pass the ID of the post to be updated and the elements to be updated. The names of the elements should match those in the database.
+
== 使い方 ==
 +
</div>
 +
 
 +
<?php wp_update_post( $post, $wp_error ); ?>
 +
 
 +
<div id="Parameters">
 +
== パラメータ ==
 +
</div>
 +
 
 +
{{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>
// Update post 37
+
<?php
   $my_post = array();
+
// ID が 37 の投稿を更新
  $my_post['ID'] = 37;
+
   $my_post = array(
   $my_post['post_content'] = 'This is the updated content.';
+
      'ID'           => 37,
 +
      'post_title'   => 'これが投稿のタイトル。',
 +
      'post_content' => 'これが更新されたコンテンツ。',
 +
  );
  
// Update the post into the database
+
// データベースにある投稿を更新する
 
   wp_update_post( $my_post );
 
   wp_update_post( $my_post );
 +
?>
 
</pre>
 
</pre>
  
===Categories===
+
<strong>$wp_error の処理</strong>
Categories need to be passed as an array of integers that match the category IDs in the database. This is the case even where only one category is assigned to the post.
+
 
 +
更新が行われないとき、エラーが起きているかもしれません。<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>
 +
 
 +
カテゴリーはデータベースに登録済みのカテゴリー ID の配列で指定します。カテゴリーがひとつの場合でも配列にします。
 +
 
 +
<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>
 +
 
 +
{{Return||整数&#124;オブジェクト|更新に成功すると投稿 ID を、失敗すると <tt>0</tt> または WP_Error オブジェクトを返します。}}
 +
 
 +
<div id="Change_Log">
 +
== 変更履歴 ==
 +
</div>
 +
* [[Version 1.0|1.0.0]] : 新規導入
 +
 
 +
<div id="Source_File">
 +
== ソースファイル ==
 +
</div>
 +
 
 +
<tt>wp_update_post()</tt> は {{Trac|wp-includes/post.php}} にあります。
 +
 
 +
<div id="Related">
 +
== 関連資料 ==
 +
</div>
 +
 
 +
[[関数リファレンス/wp insert post|wp_insert_post()]]
  
==Parameters==
+
{{Tag Footer}}
{{Parameter|$post|array|An object representing the elements that make up a post. There is a one-to-one relationship between these elements and the names of columns in the wp_posts table in the database. Filling out the ID field is not strictly necessary but without it there is little point to using the function.|optional|An empty array}}
+
  
==Return==
+
{{原文|Function Reference/wp update post|150477}} <!-- 15:22, 31 March 2015 Hotwebideas 版 -->
The ID of the post if the post is successfully added to the database. Otherwise returns <tt>0</tt>.
+
  
==Related==
+
{{DEFAULTSORT:Wp_update_post}}
[[Function Reference/wp insert post|wp_insert_post()]]
+
[[Category:関数]]
  
{{Copyedit}}
+
[[en:Function_Reference/wp_update_post]]
{{原文|Function Reference/wp update post|85036}}<!-- 05:40, 31 March 2010 Bennebw -->
+
[[tr:Fonksiyon Listesi/wp update post]]
[[Category:Functions]]
+
[[Category:New page created]]
+
[[en:Function Reference/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最新版との差分