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

説明

wp_is_post_revision() は、指定した投稿がリビジョン(編集履歴)かどうかを判定する関数です。リビジョンであれば、元の投稿のIDを返します。

基本構文

wp_is_post_revision( int|WP_Post $post );

引数

  • $post:投稿のIDまたは投稿オブジェクト

戻り値

リビジョンの場合は、元の投稿のID(整数)を返します。リビジョンでない場合は false を返します。

使い方(サンプル)

add_action( 'save_post', function ( $post_id ) {
	// リビジョンの保存では、処理を行わない
	if ( wp_is_post_revision( $post_id ) ) {
		return;
	}

	// ここに、通常の保存時の処理を書く
} );

注意点

  • 戻り値は、真偽値ではなく、元の投稿のIDです。条件式では真偽として扱えますが、「=== true」で比較すると常に一致しません。
  • リビジョンが作られる保存(投稿タイプが revisions に対応していて、内容に変更があるとき)では、リビジョンと元の投稿の両方で save_post が呼ばれます。リビジョン側を除外しないと、処理が2回実行されます。

実務での使いどころ

  • save_post フックで、カスタムフィールドの保存や、外部への通知を行うとき。
  • リビジョンから、元の投稿のIDを取得したいとき。

よくあるミスと対処

  • リビジョンを除外せず、保存のたびに同じ処理が2回走る。
  • 戻り値を true と厳密比較している。

NG例

if ( wp_is_post_revision( $post_id ) === true ) {
	return; // 戻り値は、元の投稿のIDなので、ここには入らない
}

OK例

if ( wp_is_post_revision( $post_id ) ) {
	return;
}

使い分け早見表

確認したいこと 使うもの
リビジョンかどうか wp_is_post_revision()
自動保存かどうか 定数 DOING_AUTOSAVE を確認する(リビジョンとして保存される自動保存は、wp_is_post_revision() でも除外できる)
編集の権限があるか current_user_can( 'edit_post', $post_id )

関連項目

wp_update_post()、get_post()

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

コメント

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