説明
update_post_meta() は、投稿のメタデータを更新する関数です。存在しなければ新規追加します。
基本構文
update_post_meta( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' ): int|bool
引数
$post_id:投稿ID$meta_key:メタキー$meta_value:保存する値$prev_value:更新対象を絞るときの旧値(省略可)
戻り値
新規追加ならメタID、更新なら true、失敗または変更なしなら false。
使い方(サンプル)
update_post_meta( 123, 'price', 1200 );
注意点
- 保存する値は、スラッシュ付き(
$_POST由来など)の場合はwp_unslash()で処理します。 - 入力値は
sanitize_text_field()などでサニタイズしてから保存します。
実務での使いどころ
- メタボックスで入力した値を、カスタムフィールドとして保存するとき。
- 1つのキーに、1つの値を保存・更新するとき。
save_postフックの中で、投稿のメタ情報を保存するとき。
よくあるミスと対処
- 戻り値が
falseのとき、失敗したと考える。値が変わらないときもfalseが返る。 save_postは、リビジョンの保存でも実行される。リビジョンを除外する(wp_is_post_revision())。- 保存前に、入力値のサニタイズや、権限・nonceの確認をしていない。
NG例
add_action( 'save_post', function ( $post_id ) {
update_post_meta( $post_id, 'price', $_POST['price'] ); // 検証・サニタイズがない
} );
OK例
add_action( 'save_post', function ( $post_id ) {
if ( wp_is_post_revision( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( isset( $_POST['price'] ) ) {
update_post_meta( $post_id, 'price', absint( $_POST['price'] ) );
}
} );
使い分け早見表
| 関数 | 役割 |
|---|---|
update_post_meta() |
値を保存する(なければ作成、あれば更新) |
add_post_meta() |
値を追加する(同じキーに複数の値も可) |
delete_post_meta() |
値を削除する |
関連項目
get_post_meta()、add_post_meta()、delete_post_meta()
公式リファレンス:update_post_meta() | Function | WordPress Developer Resources

コメント