WordPressのリビジョン管理 – 保存数制限・削除方法

WordPress はデフォルトで投稿を更新する際、その修正前のバージョンを「リビジョン(投稿履歴)」として保存します。この機能は、投稿を更新前の内容の確認や前の状態に戻すことができる便利なものです。

ただ初期状態ではリビジョン数を制御できるようにはなっていません。増え過ぎていくと思わぬ弊害が出てしまうこともあるので、リビジョンの上限設定を行ったり定期的に不要なリビジョンを削除したりと、その数をコントロールできるようにしておきたいものです。

保存上限を3〜5件に設定し、不要なものを定期的に削除することから始めるのが良いかなと思います。

この記事ではリビジョンの保存数の上限設定や削除方法をご紹介します。ファイル、プラグイン、SQLなどいくつかの方法をまとめています。

なぜリビジョンの制限設定が必要か?

以前の状態を復元したり変更内容を確認するために、そのデータを残しておきたい場合もあるでしょう。しかし、そのデータが増えすぎるとデメリットが発生することも覚えておきたいところです。

WordPressのデフォルトはリビジョン機能がONになっており、またリビジョン数の制限はありません。設定を初期状態のままにしていると、サイトの表示速度に影響を与える可能性があります。

何もしないと増え続けるリビジョン

リビジョンは記事を更新するときに、修正前のコピーを作って保存したデータです。そのためリビジョン機能を有効にしている場合、更新の際に公開用と保存用の2つのデータを保存していることになります。

このコピーデータは回数制限をしていないと無制限に増えるため、更新(書き直し)頻度が多いほどデータも多くなります。

10件の記事しか公開していなくても、その10件の記事それぞれに5件ずつリビジョンがあると50件もの投稿がデータベース保存されることになります。一文字修正やスペースを一つ追加、といった微修正でも更新ボタンを押せば新たな投稿データが保存されてしまいます。

そのため運用期間が長かったり、頻繁に投稿・リライトを繰り返すと、数十件~数百件と膨大なリビジョンデータが蓄積されていきます。

データが多いとサイト全体が重くなる – パフォーマンスへの影響

不要なリビジョンが多すぎると、

  • データベースが肥大化
  • 表示速度やバックアップに悪影響
  • 管理画面での処理も遅くなる

といったリスクが生じます。

私たち人間が紙の資料を探すとき、10枚の資料の中からと100枚の資料の中では、探し当てる時間が変わります。探しものをするなら全体の量が少ない方が早く見つけられます。
それはコンピュータも同じ。データが多いと探し出すのに時間がかかってしまいます。

処理速度を上げるためにも、不要なデータは極力減らしたいもの。適切な数だけ残し、残りは整理するようにしていきましょう。

リビジョンの上限を設定する or リビジョン機能のOFF

便利なリビジョン機能ですが、以前の状態を確認・復元することがなければ不要な記事内容が保存されるだけです。この機能を使わなくても問題なければ停止することもできます。

機能を残しておきたい場合は、リビジョンの上限を設定します。過去の履歴を一定数確保しつつ、データの肥大化を防ぎます。
上限を設定することで、一定数以上になったら古いリビジョンは自動的に削除されます。

リライト量や頻度にもよりますが、上限数は3〜5くらいが目安。保存数は3以上にした方がいいようです。
【参照】 WP_POST_REVISIONS を 1 に設定した場合の注意点 | MaryCore

リビジョンに回数制限を設けても、それ以上にならなければどんなに古いデータでも残ります。使用することのないリビジョンでも、投稿がある限りそのデータも残り続けます。
記事数が多い場合などは特に、不要なデータは減らしてデータベースの容量を空けておくようにしましょう。

上限数を多めにして、「上限設定+定期削除」で、効率と安全性を両立するという方法もありです。

wp-config.phpで上限を設定・停止

WordPress の基本設定ファイル「wp-confing.php」で、リビジョンの停止と保存数を設定できます。

以下のコードを記述します。どちらも「wp-confing.php」にデフォルトで記載されている /* That's all, stop editing! Happy publishing. */ より上の行に追加してください。

リビジョンを停止する

リビジョン機能を完全にオフにするという場合は以下のコードを追加します。

wp-config.php
define('WP_POST_REVISIONS', false);

これでリビジョンデータは一切作られません。投稿編集画面からリビジョン項目が表示されなくなります。

ただし既存のリビジョンの削除はされません。既に記事をいくつか書いていて、リビジョンデータを削除したい場合は、別途プラグインを使って削除します。

「WP-Optimizeで不要なリビジョンを削除」へ

リビジョンの保存数を制限する

リビジョンの上限を設定するときは以下のコードを追加します。

wp-config.php
define('WP_POST_REVISIONS', 3);

数字のところに保存上限数を入れてください。指定した数字以上は保存されず、古いデータが削除され、新しいデータが追加されます。

投稿タイプごとに停止(functions.php)

「wp-confing.php」での設定は投稿関連全てのリビジョン機能を停止させるものですが、「functions.php」では、特定の投稿タイプに限定してリビジョンを停止させることができます。

functions.php
function my_remove_supports() {
  // 投稿
  remove_post_type_support('post', 'revisions');
  // 固定ページ
  remove_post_type_support('page', 'revisions');
  // カスタム投稿タイプ
  remove_post_type_support('custom_post', 'revisions');
}
add_action('init', 'my_remove_supports');

'post' の部分に投稿タイプを指定します。(custom_post はサイトに設定されている投稿タイプの名前を記述します)

WP Revisions Control プラグインで投稿タイプごとに制御

WP Revisions Control プラグインは、投稿タイプごとに残しておくリビジョン数を設定できるプラグインです。投稿ごとの設定もできます。

【使い方】

  1. WP Revisions Control をインストール・有効化
  2. 管理画面で「設定」 →「投稿設定」を選択
  3. 設定画面で該当の投稿タイプのところに数字入力して「変更を保存」をクリック

WP-Optimize プラグインで不要なリビジョンを削除

私がリビジョンを削除するために、使用しているプラグインは「WP-optimize」です。
WP-optimize はデータベースの最適化を簡単にできるプラグインで、さまざまな機能のうちの1つにリビジョン削除があります。

【使い方】

  1. WP-Optimize をインストール・有効化
  2. 管理画面で「WP-Optimize」 →「投稿リビジョンをクリーン」を選択
  3. 「最適化を実行する」ボタンを押して最適化実行 → 古いリビジョンが削除されます

ゴミ箱や自動下書き、スパムコメントなどのデータを削除することもできるので、リビジョンに限らず不要なデータがあれば実行していきましょう。

また WP-Optimize では、スケジュールを設定して自動で定期的に削除するよう設定することもできます。
リビジョンの制限をしない場合は特に、こちらで定期的にリビジョンの整理を行う方がいいと思います。

定期的に実行されるよう設定はせず、使用しないプラグインは入れておきたくない場合、クリーンアップできたら、無効化・削除して大丈夫です。(削除したものが元に戻ることはありません)

データベースからSQLコマンドで削除

データベース操作に慣れていない方はプラグインを使った方が無難ですが、プラグインを使わない方が良い/使えない場合、SQL で直接操作する手があります。
実行前にはバックアップ必須です。もし消したくないものが消されてしまった場合でも戻せるようにしておきましょう。

データベースから一括で投稿のリビジョンを削除する場合、以下のコマンドを入力して実行します。

DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';

wp_posts テーブルから投稿タイプが revision のものを削除する」という命令です。テーブルの中の「revision(リビジョン)」投稿が一括削除されます。

また以下のコードでは、テーブルにどのくらいリビジョンがあるかを確認することができます。データ量が多ければ削除する、必要なリビジョンが含まれていないかといった確認に使えます。

SELECT * FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';

※「wp_」の部分はサイト構築時に変更している場合もあります。その場合サイトで使用しているテーブル接頭辞に変更してください。

SQLコマンドメモ : 【WP】投稿ステータスの「inherit(継承)」ってなに? – wp-note

【おまけ】自動保存の最適化(保存時間の間隔設定と停止方法)

リビジョン設定と併せて設定しておきたいものに「自動保存」があります。名前の通り、自動的に投稿内容を保存します。間違えてブラウザを閉じてしまったり、意図せずクラッシュしてしまった時に役立つ機能です。

この機能は、自動保存時の間隔変更や停止を設定することができます。

自動保存のデータは更新の際に上書きするされるものなので増えることはありませんが、変更したい場合は参考にしてください。

自動保存の「間隔」を設定

デフォルトでは1分間隔で自動保存されるので、間隔をもう少しあけたいという方は設定変更してみてください。

コードは「wp-config.php」に記述します。

wp-config.php
define('AUTOSAVE_INTERVAL', 3600);

間隔は秒数で指定します。この例では、1 時間(3600 秒)ごとに自動保存が行われる設定です。
2時間ごとに設定したい場合「60秒 × 120分 = 7200」となります。

自動保存を「停止」する

自動保存を停止したい場合は、以下のコードを「functions.php」に記述します。自動保存の間隔時間の設定とはファイルが異なるので要注意です。

functions.php
function disable_autosave() {
  wp_deregister_script('autosave');
}
add_action('wp_print_scripts', 'disable_autosave');

自動保存を停止すると投稿中にブラウザがクラッシュしたときの復旧ができない可能性も出てくるため、よく検討してください。

必要な分だけのリビジョンを設定しておく

リビジョン機能の有無・保存数はサイトの運用体制によってまちまちだと思います。はじめに上限を多くしておき、運営しながら増減や停止するかどうかを決めていくのも良いかなと思います。

  • リビジョン機能を残しつつ、上限設定+定期削除
  • 上限設定は 3~5 件程度から始めて、運用状況を見ながら調整
  • リビジョン機能を停止しても問題なければ設定

このサイトは個人で運用しており、リビジョンが必要だと感じる場面はあまりなかったため、パフォーマンス重視でリビジョン機能自体オフにしています。ですが、時々リビジョンがあったらよかったな…と思うことは正直あります。

個人で運用するサイトは要不要は自分で決めていいと思いますが、複数人で記事の投稿・編集を行うならあった方がいいと思います。
何人かで同じ記事をリライトする場合は特に、誰が何を変更したかわかるようにしておく、指示通りに変更されているかを見返すなど、リビジョンが役に立つことが多いと思います。

カテゴリー : WordPress

index