- 実践 WordPress ホーム
- 高速化 / パフォーマンス改善
WordPress で投稿のリビジョンを削除する方法
WordPress で投稿のリビジョンを削除する方法について説明します。
WordPress のリビジョン機能はコンテンツの変更をよく行うサイトで非常に便利ですが、リビジョンが蓄積されるとサイトのパフォーマンスに悪い影響を与えることがあります。 増えすぎた不要なリビジョンを削除することで、サイトパフォーマンスの改善・ディスク使用量の削減ができます。
リビジョンを削除する方法について、 WordPress 本体の機能を使う方法、 WP-CLI を使う方法、プラグインを使う方法に分けて以下説明していきます。
Note
削除したリビジョンデータはデータベースから物理的に削除されるため復元できません。 誤操作による深刻なデータロスのリスクがあるので、リビジョンを削除したり削除の自動設定を変更したりする場合は事前にデータベースのバックアップを行うことをおすすめします。
確認時のバージョン
- WordPress
6.6.2
A. WordPress 本体の機能を使う方法
WordPress 本体にリビジョンを自動削除できる機能が備わっています。 そのため基本的にはプラグインなしでリビジョン削除が可能です。
1. リビジョン数を制限する
設定ファイル wp-config.php
にリビジョン数指定のための定数 WP_POST_REVISIONS
を追加します。
こう設定した場合、保持されるリビジョン数は各投稿につき最大 5 件となります。 上限を越えると古いリビジョンから順に削除されます。
WP_POST_REVISIONS
にセットされた値と挙動は次のとおりです。
値 | デフォルト | 挙動 |
---|---|---|
-1 または true |
◯ | すべてのリビジョンを保存 |
0 または false |
リビジョン機能を無効化 | |
1 以上の整数 |
最大 N 件のリビジョンを保存 |
フィルタを書けば、投稿タイプごとに件数を変えることも可能です。
関連ページ: WordPress の投稿のリビジョンに回数制限を設定する方法
2. 制限した数以上のリビジョンを削除する
制限した数以上のリビジョンの削除処理は通常投稿保存時に行われます。
上記の WP_POST_REVISIONS
の設定を追加した後に、投稿の編集ページを開いて投稿の内容を変更して保存すると、指定された数までリビジョンが減少します。
WP_POST_REVISIONS
を 5 にセットした後に投稿を保存する:
保存後にリビジョン数が 5 になったことが確認できる:
Note
スペースを追加してまた元に戻すなどすると、変更前とまったく同じ内容で「保存」ボタンをクリックすることができますが、その場合は WordPress 内部では保存処理は走りません。 結果としてリビジョンの整理も行われず、上限を越えた古いリビジョンの削除も行われません。 古いリビジョンを削除するには投稿の内容をどこか変更して保存するようにしてください。
管理画面の投稿一覧ページの「一括操作」で編集した場合はリビジョンの削除は行われないようなので注意してください。
ちなみに、上限を越えたリビジョンの削除処理を担っているのは wp_save_post_revision()
という関数です。
実装の詳細に興味のある方はコードをご覧ください。
以下関係する部分の抜粋です。
function wp_save_post_revision( $post_id ) {
// ...
$return = _wp_put_post_revision( $post );
/*
* If a limit for the number of revisions to keep has been set,
* delete the oldest ones.
*/
$revisions_to_keep = wp_revisions_to_keep( $post );
if ( $revisions_to_keep < 0 ) {
return $return;
}
$revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );
/**
* Filters the revisions to be considered for deletion.
*
* @since 6.2.0
*
* @param WP_Post[] $revisions Array of revisions, or an empty array if none.
* @param int $post_id The ID of the post to save as a revision.
*/
$revisions = apply_filters(
'wp_save_post_revision_revisions_before_deletion',
$revisions,
$post_id
);
$delete = count( $revisions ) - $revisions_to_keep;
if ( $delete < 1 ) {
return $return;
}
$revisions = array_slice( $revisions, 0, $delete );
for ( $i = 0; isset( $revisions[ $i ] ); $i++ ) {
if ( str_contains( $revisions[ $i ]->post_name, 'autosave' ) ) {
continue;
}
wp_delete_post_revision( $revisions[ $i ]->ID );
}
return $return;
}
この方法のデメリットは各投稿を編集して保存し直す必要があることです。 件数が少ない場合は手作業で 1 件 1 件削除するのもよいですが、投稿の数が多い場合は手間がかかります。
すでにリビジョンの数が多くなりサイトが重くなってしまった場合は複数の投稿のリビジョンをまとめて削除したくなることがあるかと思います。 リビジョンをまとめて一括で削除したい場合は下の WP-CLI を使う方法かプラグインを使う方法を検討してください。
B. WP-CLI を使う方法
WordPress のコマンドラインツール WP-CLI を使う方法もあります。 すべてのリビジョンを削除するには次のコマンドを実行すれば OK です。
ここで wp post list
は投稿の一覧を出力するコマンドです。
--post_type='revision'
と --format=ids
を付けることでリビジョンのデータのみを取得しています。
wp post delete
は投稿を削除するコマンドです。
引数で指定された ID の投稿を削除します。
通常このコマンドは投稿をゴミ箱に移動しますが、リビジョンにはゴミ箱機能が無いためリビジョンに対して使う場合は --force
をつけて実行する必要があります。
C. プラグインを使う方法
リビジョン削除の用途で使うプラグインとしては Wp-Optimize というものが有名です。
データベース最適化の操作の一部として投稿リビジョンを削除する機能が備わっています。
他には Advanced Database Cleaner 、 Wp-Seep というプラグインもあります。
2024 年 9 月時点でアクティブインストール数はそれぞれ次のようになっています。
プラグイン | アクティブインストール数 |
---|---|
WP-Optimize | 100 万以上 |
Advanced Database Cleaner | 10 万以上 |
WP-Sweep | 10 万以上 |
補足
- リビジョン機能は投稿を間違って更新してしまった場合に前の状態を復元できる便利な機能です。完全に無効にするとその機能が失われてしまうので完全に無効にするのはおすすめしません。
- 削除したリビジョンデータはデータベースから物理的に削除されるため復元できません。リビジョンに関する操作や設定の変更を行う前にはデータベースのバックアップを必ず取るようにしてください。