WordPress リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress

ローカルからサーバーにデータ移行時に怪しいデータを発見

データベースから移行用のデータをダウンロードして、ローカルURLから移行先のURLに置き換えたあと、ローカルディスクに依存しているデータがまだ残っていたので、よく調べて、このままデータを移行してもよいか不安でした。実際下記のレコードだけではなく、もっと多かった。

(327, 1, '2021-05-22 16:32:58', '2021-05-22 07:32:58', '<!-- wp:html -->\n<link rel=\"stylesheet\" href=\"zhuzhuming\\wp-content\\plugins\\h2vR-for-wordpress\\h2vR.css\" />
(328, 1, '2021-05-22 16:33:49', '2021-05-22 07:33:49', '<!-- wp:html -->\n<link rel=\"stylesheet\" href=\"C:\\xampp\\htdocs\\zhuzhuming\\wp-content\\plugins\\h2vR-for-wordpress\\h2vR.css\" />\n

上記の328のPost_idでアクセスしてみると、本来はもう削除されている記事ですね。なので、おそらく絶対パスであってもサーバーにデータをそのまま移行して、弊害がないはずです。

リビジョンpost_idが多過ぎ

ある記事を開いて、右側の投稿欄を見ると、59件のリビジョンもあった。
データベースをダウンロードして、SQLファイルのサイズも余計に大きいです。

SQL文で wp_posts テーブルのリビジョンだけ削除

wp_posts テーブルの post_status 項目が「inherit」で post_type 項目が「revision」になっているデータがリビジョンのデータなので、SQL文は以下になります。

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

SQL文でリビジョン関連のデータすべてを削除

wp_posts テーブル だけでなく、関連している wp_term_relationships テーブルと、wp_postmeta テーブルのリビジョンも削除したい場合のSQL文は以下になります。

DELETE a,b,c FROM wp_posts a
LEFT JOIN 
wp_term_relationships b 
ON (a.ID = b.object_id)
LEFT JOIN 
wp_postmeta c 
ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';

リビジョン削除後の効果

今後もリビジョン作成させない対策

wp-config.php に以下のコードを1行足すだけです。
足す場所もご注意ください。

//カスタマイズ
define('WP_POST_REVISIONS', 1);//リビジョンの数を指定

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

参考サイト

WordPress リビジョンを削除 https://ara-web.net/blog/wordpress/post-4946/

リビジョン数の設定にエラーの対処:
https://wordpress.stackexchange.com/questions/158075/notice-constant-wp-post-revisions-already-defined

コメント

タイトルとURLをコピーしました