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

説明

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

コメント

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