WordPressのリビジョン削除


いつも怪しげな情報を載せてるこのブログですが
リビジョンの存在も気にせず書きまくってたら1記事12リビジョンとか。
あーこれはまずいなとリビジョンの消し方を探っていたのですが、通常使えるBettar Delete Revisionとかいうリビジョンバッサリやっちゃうプラグインが、SQLiteDBでワードプレス運用してる場合使えないんだと。

だもんでさらに手動で削除しようかとおもい検索。

DELETE FROM wp_posts WHERE post_status = 'inherit' ;

inheritステータスでwp_postsに保存されてるからそれ削除しな、ということだったので削除。
ついでにどうせ消したところ容量に加算されてるだろうから圧縮かましてしたら600Kbyte→1.5Mbyte

え・・・なんで?
わからん。まぁDBもどして普通に使えてるからまあいいか。。。ホントニ?・・・

追記:
なんかやっぱだめそうだった。特にpost_typeがattachmentのやつけしちゃまずいかんじ。
画像がアップロードはされてるがメディアにでてこない。DBもどしたー
select * FROM wp_posts WHERE ((post_status='inherit') and not(post_type='attachment'))
これで出てくるやつは消していいのかなぁ・・・よーわからん

追記2:
DELETE FROM wp_posts WHERE post_type = 'revision' ;
これでいいとの記述もあったし、自分のDBみても消しても問題なさそうではある。確認はしてない

追記3:

  • 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'

あとSQLite Integrationのプラグイン互換性チェック&改造方法にこんなコードもあった
$sql = "SELECT ID FROM $wpdb->posts WHERE post_type = 'revision'";
$col_id = $wpdb->get_col($sql);
$id_to_delete = implode(',', $col_id);
$queries[] = "DELETE * FROM $wpdb->posts WHERE ID IN ($id_to_delete)";
$queries[] = "DELETE * FROM $wpdb->term_relatiionships WHERE object_id IN ($id_to_delete)";
$queries[] = "DELETE * FROM $wpdb->postmeta WHERE post_id IN ($id_to_delete)";
foreach ($queries as $query) {
$wpdb->query($query);
}

ワードプレスの中身しらん初心者だがやりたいことはわかる。

wp_postsのpost_type=’revision’のIDを記憶しておいて、これらのテーブルの同IDのレコードも消すのがいいらしいがauto-draftが消えないとか色々問題もあるのかなぁ
せっかくリビジョン考えた仕組みになってるのになんで削除機能をワードプレス本体が持ってないのか謎だなぁ。
画像とかのリレーションもデータベースのリレー切れたら無いも同然だし。
テーマいじる管理画面よりもそういうののほうが大事な気がするんだけど。まあ愚痴終了。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)