phpMyAdminで特定の文字が入っているカスタムフィールドを抽出し、該当する複数の記事を一括で削除する
久々にWordpressの記事を。
カスタムフィールドはCustom Field Templateなどで拡張して、様々な入力を実現することができる。
今回はカスタムフィールド内に、ある特定の文言や数値等が入っている記事を一括で消したい。
という場合の方法を考えてみた。
前提として
SQLでカスタムフィールド内に特定の文字が含まれる列を検索して、見つかった記事のIDを抽出し、記事消す作業を行う。
なので、ジャンルというカスタムフィールドを作成し「metal」という入力がある記事を探す場合「death metal」も検索対象となるので注意。
方法
phpMyAdminにログインして該当するデータベースに移動する
カスタムフィールドの値が入ってる「wp_postmeta」テーブルを表示する
一覧が表示されるので、上部メニューの「検索」をクリックし、検索する。
今回は「う○こ」が含まれる列を検索。
(%%はワイルドカードと呼ばれるもの。詳しくはこちらを参照。)
う○こが含まれている列の一覧が表示されるので、エクスポート。
う○こをエクスポート。
1行目にカラムを追加する。こうするとエクスポートしたCSVの1行目に「meta_id」「post_id」というカラムが付加される。
こうしてエクスポートしたCSVのpost_idが記事のIDとなる。
これを以下のSQLに反映させ、SQLを流すと、見事該当の記事を消す事が出来る。
DELETE FROM wp_postmeta WHERE `post_id` IN(う○こが含まれる記事のpost_id)
例
DELETE FROM wp_postmeta WHERE `post_id` IN(1,2,3,4,5)
ただこれだとpost_metaは削除できたが、記事の大元「wp_posts」は消せていない。
そこで以下。
DELETE FROM wp_posts WHERE `ID` IN(う○こが含まれる記事のpost_id)
追記
タクソノミーと記事を結びつけるテーブルも削除する必要がある。
DELETE FROM wp_term_relationships WHERE `object_id` IN(1,2,3,4,5)
これで該当する記事を削除する事ができる。