WordPressにはリビジョン機能というものがありますが、書き換えた記事をやっぱり元に戻したいという場合などには便利な機能ですが、ほっておくとデータベースを圧迫したり、動作が遅くなる原因にもなります。
ここでは今までのリビジョンを削除し、保存数などをプラグイン無しで変更する方法を書きたいと思います。
WordPressのリビジョン機能
リビジョン(revision)とは「修正」や「改訂」といった意味があるそうで、WordPressに搭載されているリビジョン管理機能は投稿や固定ページの編集中に記事を自動保存し、古いリビジョンから過去の記事を復元することもできます。
ただリビジョンを削除する機能はありません。なのでほっておけばどんどんリビジョン数が増えていきます。
データベースのバックアップ
データベースに関わることをする場合、万が一の時のために必ずバックアップを取っておきましょう。
バックアップの取り方は下記に書いてありますので、どうぞご参考に。
保存するリビジョン数を制限する
あまりいろいろなプラグインを入れたくないという方もいると思います。
またサイトをオープンして間もない場合は、リビジョンもそんなに溜まっておらず、今後のリビジョン数を制限するだけでよいという場合もあると思います。
保存されるリビジョン数を制御するには、wp-config.phpファイルに以下のコードを追加します。
define('WP_POST_REVISIONS',数字);
数字の部分に最大保存数を入れます。
例えば5記事なら
define('WP_POST_REVISIONS',5);
記述する箇所は、
require_once(ABSPATH . ‘wp-settings.php’);
より前に記述します。前であればどこでもよいという話です。
とりあえず下記の85行目あたりに入れます。
define('WP_DEBUG', false); /* リビジョン数を管理 */ define('WP_POST_REVISIONS',5); /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
wp-config.phpを保存してアップします。
これで5記事以上増えなくなると思います。古いものから削除されていきます。
ただ現状の投稿がすでに5を越えてリビジョン10とかになっていた場合、5になるわけではありません。
リビジョンを無効にする
リビジョンそのものを無効にすることもできます。
その場合は、
define('WP_POST_REVISIONS',false);
と書きます。
ただリビジョンを無効にすると下書き保存のプレビュー機能も無効になります。
なのでお勧めできません。
リビジョンの自動保存の間隔を設定する
リビジョンは自動で保存される機能があります。
デフォルトは、60秒のようです。
この間隔を変更するには下記を追加します。
define(AUTOSAVE_INTERVAL, <秒数>);
デフォルトは60秒なので、例えば1時間は60×60=3600です。
define(AUTOSAVE_INTERVAL, 3600);
これをさきほどの保存数管理の下に追加します。
define('WP_DEBUG', false); /* リビジョン数、自動保存を管理 */ define('WP_POST_REVISIONS',5); define(AUTOSAVE_INTERVAL, 3600); /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
これで最大保存数は5記事分にして、自動保存は1時間ごとという設定ができました。
ただこまめな保存を希望する場合は、3分や5分とかでも良いのではと思います。
自動保存を停止
自動で保存される機能はいらないという場合は、functions.phpに下記を追加します。
function disable_autosave() { wp_deregister_script('autosave'); } add_action( 'wp_print_scripts', 'disable_autosave' );
自動保存機能は、自分で保存しなくても勝手に自動で保存してくれる機能ですが、これが役に立つ場合もあります。
書いている途中にわざわざ「更新」を押して保存するのがめんどくさいという人も多いと思います。まったく保存しない状態で、書き途中にフリーズしてしまったら?
そんなときに、自動保存機能が効いていれば、真っ白ではなくどこかの部分までは復活するでしょうから、停止しないという選択もありだと思います。
リビジョンをphpMyAdminからMySQLにアクセスし手動で削除
今までのリビジョンを手動で削除したいと思います。
もちろんあまり溜まっていなそうな方は、削除しなくても良いと思います。
MySQLをいじるのがちょっと怖いなと思う方は、プラグインからの方が良いかもしれません。
ここではphpMyAdminからMySQLにアクセスして削除する方法を書きたいと思います。
phpMyAdminからMySQLへのログインは下記を参考にしてください。
WordPressのリビジョンは、データベース上の「接頭辞_posts」の中のpost_typeという項目に格納されています。
「接頭辞_posts」をクリックします。
テーブルの右のほうを見るとpost_typeがあると思います。
revisionとなっているデータをSQL文で削除します。
SQLタブを開きます。
デフォルトで記入されているSQL文を削除し、以下のSQL文を入力します。
DELETE FROM 接頭辞_posts WHERE post_status = 'inherit' AND post_type = 'revision';
接頭辞がwpなら
DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';
入力をしたら、右下のほうにある実行するボタンをクリックしてください。
これでリビジョンが全て削除されます。
念のため管理画面から記事を見てみると、リビジョンがなくなっています。
コメントをどうぞ
非常に有用な記事、ありがたいです。
データベースに関しての知識があまりないので助かります。
一つ質問がございます。
現在サイトスピードの改善を行っており、
記事のリビジョンがかなり多くなっているため、削除をしようと思っています。
ただ、リビジョンを削除してもサイトスピードが改善されなかった場合、
リビジョンを戻したいと思っています。
削除方法は分かったのですが、リビジョンを復活させる方法が現状分かっておりません。
どのような対応をすればよいでしょうか。
例えばsqlデータを一式、もしくはpostsデータのみエクスポートして残しておき、
再度一式インポートすれば元のリビジョンが復活するのでしょうか?
0930さん、初めまして、
知りたいねっと管理人です。
記事をご覧くださりありがとうございます。
ご質問の件ですが、sqlデータもしくはpostsデータをエクスポートして、再度インポートすればリビジョンは復活します。ただしエクスポートする時に、保存方法に注意が必要です。
データベースに詳しくないようでしたら、あまりmysqlをいじるのはおすすめいたしません。
いちおこちらの環境では、phpMyAdminでpostsをエクスポートする際にオプションで「DROP TABLE / TRIGGER コマンドを追加する」にチェックを入れれば問題なくできました。これを外すと、エラーになります。
もしくは、プラグインで、All-in-One WP Migrationというバックアッププラグインを試してみましたが、こちらでデータをエクスポートして、またインポートすると、リビジョンも一緒に復活していることを確認しました。他のバックアッププラグインは検証していませんが、こういったバックアッププラグインでもリビジョンは復活するのではと思います。
ただ万が一復活できなかった場合、こちらでは責任は取れませんので、何卒自己責任の上でお試しいただけたら幸いです。
もしテスト環境など作成できるようでしたら、まずは本番をすべてバックアップし、テスト用のデータベースを構築して試してみて、いけることを確認してから作業されると良いかと思いますよ!
よろしくお願いいたします!
>>rivisionとなっているデータをSQL文で削除します。
revisionかもです。
役立ちましたさん
ご指摘ありがとうございます。
revisionですよね。
修正しておきました。
どうもありがとうございます!