WordPressのコメントを別記事に移動する

そのエントリにコメントして欲しくないんだけどーと思いつつ、誰かがコメントしたためにみんながあとに続けとばかりになることがある。俺様権限でコメントを適切なエントリに移動しようと考えた。

WordPressでコメントを別記事に移動する方法 | Sabakura Blog にあるようにデータベースを直接変更した。

SQLについてわかる人のみ自己責任でお試しください

あるエントリ(post_ID=1)についているコメントは以下のSQL文で確認できる

SELECT * FROM wp_comments
 WHERE comment_post_ID=1;

post_ID=1のエントリに付いているコメントをpost_ID=2のエントリに移動する場合は

UPDATE wp_comments
 SET comment_post_ID = 2
 WHERE comment_post_ID = 1;

でいける。特定のコメントだけを移動したい場合は、SELECT したときに comment_ID を控えておく。comment_ID が100,101のものを移動する場合は以下のようになる

UPDATE wp_comments
 SET comment_post_ID = 2
 WHERE comment_post_ID = 1 AND comment_ID IN (100,101);

逆に100,101以外を移動したい場合はNOT INを使えばいい。

UPDATE wp_comments 
 SET comment_post_ID = 2
 WHERE comment_post_ID = 1 AND comment_ID NOT IN (100,101);

最後に投稿テーブルにコメント数のキャッシュを持っているので移動元、移動先のエントリID=1,2のコメント数を更新する。

UPDATE wp_posts
 SET comment_count = (SELECT COUNT(*) FROM wp_comments WHERE comment_post_ID = wp_posts.ID AND comment_approved = 1)
 WHERE ID in (1, 2);

WordPressはこうやってコメントの数やタグ・カテゴリに関連するエントリの数などをカラムに持っているのでデータベースを直接変更する場合は注意が必要である。