WooCommerceで過去の注文を一括削除する方法(MySQL)

WooCommerceの管理画面って、受注データが溜まってくるとどんどん重くなってしまうので、定期的に古い受注データを削除する必要があるんですが、その時の手順を忘れないように備忘録として書いておきます。

手順の概要

ざっくり手順を書くと次のようにします。

  1. データベースのバックアップ(忘れがちなのであえて書く)
  2. phpMyAdminなどでSQLを実行して古い受注をゴミ箱へ
  3. WordPress管理画面からゴミ箱を空にする

(1)データベースのバックアップ

データベースのバックアップは、mysqldumpコマンドでやってもいいし、Wordpressプラグインで行っても良いと思います。個人的には「All-in-One WP Migration and Backup」というプラグインが好きです。

参考(コマンド):mysqldumpでバックアップ・リストアする
https://www.tohoho-web.com/ex/mysql-mysqldump.html

参考(Wordpressプラグイン):All-in-One WP Migration and Backup
https://ja.wordpress.org/plugins/all-in-one-wp-migration/

(2)SQLを発行して古い受注をゴミ箱へ

これが重要なんですが、いきなり古い受注情報をMySQLなんかで削除すると、それに付随する様々なデータがそのまま残ってしまう可能性があるのでお勧めしません。

なので、まずはphpMyAdminやサーバにログインして次のようなSQLを実行します。

UPDATE
    wp_posts
SET
    post_status = "trash"
WHERE
    post_date < DATE_ADD(NOW(), INTERVAL -1 YEAR) AND post_type = "shop_order"

「wp_posts」はお使いのWordpressによって名前が変わってるかもしれないです。環境に合わせて「(何かランダムな文字列)posts」に変更して実行してください。

「-1 YEAR」となってるので、過去1年より前の受注データがゴミ箱へ移動されます。必要に応じて「-3 YEAR」とかにすると3年分残せます。

(3)管理画面からゴミ箱を空にするを選ぶ

WordPressにログインして、「WooCommerce→注文」のページにアクセス、ページ上部の「ゴミ箱」をクリック→「ゴミ箱を空にする」ボタンをクリックします。

非常にたくさんのデータがゴミ箱内にある場合には、一気に空にならずにアクセスするごとに徐々に削除されていきます。焦らず待ちましょう…

ゴミ箱から削除することで、標準的な不随データのほか、プラグインで生成された情報もきれいに削除されると期待できます。

その他

なんか急いで書いたので「わかってる人向け」になったかもしれませんが、コメントなど頂けると質問に答えられるかもです。あとバックアップは正義・・・しかし、復旧の練習も大事だと思います。バックアップしても復旧できなかったら意味ないですしね(笑)

質問・コメントなどあると嬉しいです