説明
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

コメント