- WordPressの古いリビジョンを整理するカスタムプラグインを作成しました。
- このプラグインは一週間以上前のリビジョンから日ごとに最新の一つだけを残し、データベースの肥大化を防ぎます。
- 管理画面からリアルタイムで進行状況を確認でき、毎日自動実行されるため効率的なサイト管理ができます。

WordPressの記事保存の処理は、体感ではそこまで速くはなりませんでした。
1. 編集履歴を管理するプラグインを作った
WordPressで記事を保存する処理が遅くなってきた気がします。
リビジョン(編集履歴)が増えていることが原因と考え、古いリビジョンを整理するカスタムプラグインを作りました1。
一週間以上前のリビジョンは一日あたり最新の一つだけを残し、他は自動的に削除します。

これにより、データベースの肥大化を防ぎ、サイトの動作を軽快に保ちます。
1-1. プラグインのファイル構成
プラグインは、以下の構造でファイルを配置しました。

これ圧縮して「wp-content/plugins」ディレクトリにインストールします。

プラグインの誤動作に備えて、サイト全体のバックアップを作成したり、検証用WordPressサイトでテストしたりしました。
「Chiilabo Revision Cleaner」を有効化すると、メニューの「ツール」に「リビジョン整理」という項目が追加され、管理画面にアクセスできるようになります。


このカスタムプラグインはサンプルコードです。
動作の保証はできません。
自分で作ったほうが良いと思います。
1-2. 【残念】リビジョンを削除できたが効果は薄かった
リビジョンを削除する処理には時間がかかりましたが、ちゃんと減っていました。

ただし、思ったほどの効果はありませんでした。
記事保存中にかかる時間はやはり20秒ぐらいかかっています。

リビジョンデータのサイズはそこまで大きくなく、バックアップサイズに与える影響もわずかでした。
2. 主な機能と使い方
このプラグインには以下の機能があります:
- 一週間以上前のリビジョンを自動整理(各日付の最新1件のみ保持)
- 毎日午前3時に自動実行
- 「今すぐ実行」ボタンによる手動実行
- 実行履歴の確認機能
- リアルタイムの進行状況確認
2-1. 進行状況の確認方法
- 管理画面の「今すぐ実行」ボタンをクリック
- 「バックグラウンドで実行」(デフォルトでオン)のまま実行
- 進行状況確認画面で処理状態を確認
進行状況画面では:
- 3秒ごとの自動更新で最新状態を表示
- 手動更新ボタンでも状態更新可能
- 全体の進捗状況を表示
- 直近の処理内容を色分けして表示(削除/保持)
- 処理完了時に自動更新停止
2-2. 実行中の動作確認
このプラグインは、ブラウザを閉じても問題なく動作します。
WordPress標準のCronシステム(WP-Cron)を使用しているため、管理画面を閉じた後でも自動実行は継続されます。
プラグインがセットアップしたCronジョブは、WordPress自体の仕組みの中で管理されます。
次回サイトへのアクセス時に、予定時刻を過ぎていれば実行されます。
手動実行の場合は、「今すぐ実行」ボタンを押した後、処理が完了するまでページを開いておく必要があります。
注意点:
- WordPressのCronはサイトへのアクセスがあった時のみ実行されます
- アクセスが長期間ない場合、スケジュール通りに実行されない可能性があります
- より正確な実行が必要な場合は、サーバーのCronで「wp-cron.php」を直接実行するよう設定できます
3. プラグインの構造と仕組み
プラグインは複数のファイルに分かれており、それぞれが特定の役割を担っています。
wp-revision-cleaner/
├── wp-revision-cleaner.php
├── includes/
│ └── class-revision-cleaner.php
└── admin/
├── class-admin-page.php
├── css/
│ └── admin-style.css
└── js/
└── admin-script.js
- メインファイル(wp-revision-cleaner.php)は、プラグインの入り口となるファイルです。
定数の定義や必要なファイルの読み込み、プラグインの有効化・無効化・削除時の処理などを行います。 - 機能実装ファイルは二つあります。
「class-revision-cleaner.php」はリビジョン削除の中心的な機能を提供します。
古いリビジョンを検索して整理するための処理や、データベース操作、結果の記録などを行います。
「class-admin-page.php」は管理画面の表示を担当します。
メニュー項目の追加や実行結果の表示、履歴の管理などを行います。 - アセットファイルも二つあります。
「admin-style.css」は管理画面のデザインを定義します。
「admin-script.js」は詳細表示の切り替えや実行前の確認など、画面の動作を制御します。

Claudeの生成するコードは、だいぶ大がかりなものになってきたね。
3-1. 処理の流れ
プラグインの動作は次のような流れで行われます。
- 初期化時には、WordPressがプラグインのメインファイルを読み込み、必要なクラスファイルが準備されます。
プラグイン有効化時には、定期実行のためのスケジュールが登録されます。 - 定期実行時には、WordPressのCron機能が「daily_revision_cleanup」アクションを実行し、古いリビジョンの検索と整理が行われます。
処理結果はログに記録されます。 - 管理画面にアクセスすると、次回の実行予定や過去の実行履歴が表示されます。
「今すぐ実行」ボタンも表示されます。 - 手動実行時には、フォーム送信によりリビジョン整理処理が実行され、結果ページにリダイレクトされます。
- プラグイン無効化時には、登録されたCronジョブが削除されます。
プラグイン削除時には、保存されたオプションデータも削除されます。 - バックグラウンド実行モードでは、実行ボタンの下に「バックグラウンドで実行」オプションが追加されました。
チェックを入れると進行状況確認画面に移動し、チェックを外すと従来通りの同期実行になります。
![[WordPress]カスタムプラグインで投稿文字数の自動集計機能を追加した](https://chiilabo.com/wp-content/uploads/2023/05/image-3-16-320x198.jpg)


