説明
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_is_post_revision() | WordPress Developer Resources

コメント