ウェブサイト検索

MySQLクエリを使用してWordPressのゴミ箱を空にする方法


HTGのメインでは、説明のない35%のGoogleトラフィックの減少を受けて、整理を進めています。その一環として、もはや必要のない古い投稿を削除しています。

問題は、一度に何百回も、何千回もWordPressの投稿を削除してしまうと、インターフェースを使ってごみ箱を空にすることが基本的に不可能だということです。数分かかりますが、タイムアウトしてごみ箱を空にすることに成功しません。

幸運なことに、常により良い方法があります...そして、この場合、データベーススクリプトを実行することは非常に簡単です。このコマンドをターミナルで実行することにより、MySQLコンソールを起動できます。wp-config.phpファイルの値を使用してデータベースに接続します。

mysql -uUser -pPassword database

そこに到着したら、次の内容を貼り付けて、あなたのサイトが壊れても怒らないと約束してください。おそらく、ウェブサイトの完全なバックアップを持っていた方が良いでしょう。

DELETE wp_posts,wp_term_relationships,wp_postmeta,wp_term_taxonomy

FROM wp_posts

LEFT JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id )

LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )

LEFT JOIN wp_term_taxonomy ON ( wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )

WHERE wp_posts.post_status='trash';

これが行うのは、wp_postsから投稿レコード自体を削除するだけでなく、wp_postmeta、wp_term_relationships、wp_term_taxonomyからの追加メタデータも削除することです。後者の2つはカテゴリとタグの割り当てのためのものであり、前者は投稿自体に関するメタデータのためです。

この文のDELETE部分は、データを削除したいテーブルをリストアップし、MySQLはこのクエリに一致するテーブル内のすべてのレコードを削除します。したがって、明らかに、この手法を調整するつもりなら、本当に慎重になるべきです。

もちろん、delete from wp_posts where post_status='trash'を使用して投稿を削除することもできますが、それでは周りのメタデータが残り、余計なデータが大量に残る可能性があります。

まず、このスクリプトをローカルの開発環境やQAサイトで実行することを強くお勧めします。そうすることで、期待通りに動作するか確認できますよね。真昼間の本番環境でランダムなSQLを実行することはないでしょう?

関連記事: