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

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

関数リファレンス/wp update post

提供: WordPress Codex 日本語版
移動先: 案内検索

データベースにある投稿(および固定ページ)を更新します。更新したい投稿の 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最新版との差分