wp_update_post() の使い方|説明・引数・注意点

説明

wp_update_post() は、既存の投稿を更新する関数です。

基本構文

wp_update_post( array|object $postarr, bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error

引数

  • $postarr:ID と、変更したいフィールドの配列
  • $wp_error:true で失敗時に WP_Error
  • $fire_after_hooks:保存後のフックを実行するか

戻り値

成功すると投稿ID。失敗時は 0 または WP_Error。

使い方(サンプル)

wp_update_post( array(
	'ID'         => 123,
	'post_title' => '新しいタイトル',
) );

注意点

  • save_post フック内で呼ぶと無限ループになります。呼ぶ前に remove_action() で外すなどの対策が必要です。
  • 指定しなかったフィールドは変更されません。

実務での使いどころ

  • 既存の投稿のタイトルや本文、ステータスを、プログラムから変更するとき。
  • 下書きを公開にするなど、公開状態を変更するとき。
  • 複数の投稿を、まとめて更新するとき(ループの中で呼ぶ)。

よくあるミスと対処

  • ID を指定していない、または存在しないIDを指定している。意図した投稿が更新されない。必ず ID を指定する。
  • save_post フックの中で呼び、無限ループになる。呼ぶ前に remove_action() でフックを外す。
  • カスタムフィールドの更新に使っている。カスタムフィールドは update_post_meta() を使う。

NG例

add_action( 'save_post', function ( $post_id ) {
	wp_update_post( array( 'ID' => $post_id, 'post_title' => '更新' ) ); // 無限ループになる
} );

OK例

add_action( 'save_post', 'my_update' );
function my_update( $post_id ) {
	remove_action( 'save_post', 'my_update' );
	wp_update_post( array( 'ID' => $post_id, 'post_title' => '更新' ) );
	add_action( 'save_post', 'my_update' );
}

使い分け早見表

やりたいこと 使うもの
新規作成 wp_insert_post()
既存の投稿を更新 wp_update_post()
カスタムフィールドを更新 update_post_meta()

関連項目

wp_insert_post()、get_post()、wp_delete_post()、update_post_meta()、remove_action()

公式リファレンス:wp_update_post() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました