古いアイキャッチ画像を一括削除したい
- 評価
- クリップ 0
- VIEW 305
環境
WordPress: バージョン 5.1–ja
主なplugins:
The Events Calendar バージョン 4.8.2
All-in-One WP Migration バージョン 6.86
普段の使い方
「The Events Calendar」を使ってイベントの告知などを行っています。
その中でアイキャッチ画像をアップロードして表示させています。
状況
過去のイベントが相当溜まっていて、そのせいでメディアライブラリの画像ファイルのサイズが肥大化しています。(550MBなど)
All-in-One WP Migrationでエクスポートは出来るのですが、このままでは戻しが出来なくなる可能性が考えられます。
インポートできるファイルサイズを増やすのも一つの手段とは思いますが、もう見られることのない過去のイベントのアイキャッチ画像を残しておく意味もないので消したいです。
分からないこと
.../wp-content/uploads/ ディレクトリから過去の年月のファイルをごっそり消せばいいかと思ったのですが、そこに入ってるのが必ずしもアイキャッチ画像とは言えないとか、ファイルだけ消した時にDBとの連携が崩れてサイト全体に影響が出たりしないのかなど、不明な点があって動けない状態です。
質問
例えば2017/12/31以前のアイキャッチ画像を一括削除するとしたら、何をすればいいのでしょうか?
追記 2019.3.9 21:50
uploadsフォルダの中から100件ランダムにファイルを抽出して表示させてみました。
これで何かわかりますでしょうか?
$ find . -type f | sort -R | head -100 | sort
./2016/08/14361300_1215882128453721_7031022539641487263_o-1170x350.jpg
./2016/09/14563397_1121827334578675_3125468939972827961_n-678x500.jpg
./2016/09/20161015_04.jpg
./2016/09/634ad7ca8b3707d454126ea7f9ba626b-768x768.jpg
./2016/09/634ad7ca8b3707d454126ea7f9ba626b-960x350.jpg
./2016/09/MR3_8966-270x250.jpg
./2016/10/20161024_kingtone-741x1024.jpg
./2016/10/20161024_kingtone.jpg
./2016/10/2016arabmusic6-570x350.jpg
./2016/10/a4ef48625cf07bf444c577b3d8dde995-300x162.gif
./2016/10/a4ef48625cf07bf444c577b3d8dde995-570x350.gif
./2016/10/bellyshow_tue-300x162.gif
./2017/01/0411_27-823x1024.jpg
./2017/01/16651937_1239306936161496_853182413_n-150x150.jpg
./2017/02/accessorie-768x541.jpg
./2017/02/sanbika2-649x500.jpg
./2017/04/clw-300x254.jpg
./2017/04/clw-480x350.jpg
./2017/04/jpeg8-768x1086.jpg
./2017/06/20045799_1607441952601661_1673597486_n-150x150.jpg
./2017/06/20170824.jpg
./2017/07/2017season3_04-2500x500.jpg
./2017/08/tahiti2018_001-1024x718.jpg
./2017/09/5-909x350.jpg
./2017/10/22450501_1322709924517452_1989309109_o.jpg
./2017/10/697cee3eb3f296394ec374a519e19eec-214x300.jpg
./2017/11/23549840_1372720666166528_2079493223_n-150x150.jpg
./2017/11/23585330_1372720856166509_826718682_o-1170x500.jpg
./2017/11/23626996_1372718499500078_720742735_o.jpg
./2017/11/58d1ff1cabe7e14ee738a8fdb6f13f28-570x350.jpg
./2017/11/funbest-1200x500.jpg
./2017/12/21441301_1290003087788225_806761311_o-150x150.jpg
./2018/01/26001196_1800229066685688_759098543772173305_n-800x500.jpg
./2018/01/afurican-150x150.jpg
./2018/01/afurican-300x217.jpg
./2018/01/ce10574a11181d8ab84090d8091d702f-150x150.png
./2018/02/28190791_220109075206867_2014730384_n.png
./2018/03/20180429-570x350.jpg
./2018/03/29792128_10215725627998829_2714138984133481922_n-300x212.jpg
./2018/03/29830922_803170879893906_80961616_o-570x350.jpg
./2018/03/IMG_7457-1170x350.jpg
./2018/05/32260786_1927169287295591_4011754700075433984_n-212x300.jpg
./2018/05/32440753_1930174416995078_7283471610038714368_n.jpg
./2018/05/33057846_1516437891811409_9201524762285703168_n-300x300.jpg
./2018/05/6e8f59a781579b0a36f7e47339c86678.jpg
./2018/05/77c8eb7b4568315b02bb8194f8b756ac-1170x500.jpg
./2018/05/77c8eb7b4568315b02bb8194f8b756ac-270x250.jpg
./2018/06/88C9F283-6094-42EE-AC1F-A1AB6FBAEF69-1024x463.jpeg
./2018/07/27072753_1841288652579729_6017070493526408786_n-960x350.jpg
./2018/07/37955594_2031563456856173_4690324245392130048_n-150x150.jpg
./2018/07/44377336_335034917245154_3806025822431608832_n-270x250.jpg
./2018/08/15D093AB-2281-4F1A-9095-D1EF49CFE045-1170x500.jpeg
./2018/08/3014C16E-29EC-478D-BCB5-DEE599B8E9C8-570x350.jpeg
./2018/08/38856407_262981977762820_2613698692963631104_n-270x250.jpg
./2018/09/0818F898-5D29-48EC-BC84-113477E69922-1170x500.jpeg
./2018/09/3E4D33AD-7E3F-4B20-9D28-06AA684D1DBB-750x500.jpeg
./2018/09/DCFDC850-160F-47BE-B8E0-BC0807832710-1170x350.jpeg
./2018/10/38939095_1632560623539168_245709456891969536_n-960x500.jpg
./2018/10/43625380_312473259342363_1287576735155486720_n-270x250.jpg
./2018/10/43756793_2263253423716581_2985736684357812224_n-768x512.jpg
./2018/10/44157359_2272411366134120_1894912972262735872_o-270x250.jpg
./2018/10/44368373_406909039844664_2060635359120719872_n-280x350.jpg
./2018/10/44474608_2323585311202699_1667805392391897088_n.png
./2018/10/44629794_2174507072867567_1005212571365539840_n-200x300.jpg
./2018/11/45032927_1952969401463659_3158338316038832128_n.jpg
./2018/11/46361143_2335494739825782_1541791331100131328_o-150x150.jpg
./2018/11/46361143_2335494739825782_1541791331100131328_o-300x169.jpg
./2018/11/46384926_2243670819288744_7461594697056649216_n-214x300.jpg
./2018/11/46384926_2243670819288744_7461594697056649216_n-270x250.jpg
./2018/11/46474721_345223999373762_4043298881222475776_n-270x250.jpg
./2018/11/47573009_516032832226568_7660406293647065088_n.jpg
./2018/11/51391257_291672301507568_2239544030016831488_n-214x300.jpg
./2018/12/24003ae0c249c652a4b30e8192360856-508x359.png
./2018/12/28059092_1879115229045992_6167059942645602175_n-768x512.jpg
./2018/12/38404514_1791034487612231_4507401609730326528_n-88x88.jpg
./2018/12/38814928_265649234028353_2220155843268050944_n-1024x684.jpg
./2018/12/46447597_2335510393157550_5156678077928964096_n-960x500.jpg
./2018/12/47296365_1099275973585517_603720295550812160_n-270x250.jpg
./2018/12/banner2-150x100.png
./2019/01/031301-768x1086.jpg
./2019/01/48391666_1964939273807301_8177478643363086336_n-1-88x88.jpg
./2019/01/48391666_1964939273807301_8177478643363086336_n.jpg
./2019/01/49716154_2156083844640954_1842138492893659136_n-1-150x150.jpg
./2019/01/50084404_2458622254179696_5514200561626382336_n-300x158.jpg
./2019/01/50084404_2458622254179696_5514200561626382336_n-88x88.jpg
./2019/01/50541973_2451278848247370_373284055896031232_n.jpg
./2019/01/51892003_322259191735544_192327355614625792_n-150x150.jpg
./2019/01/Silkroad-Cafe-2019-1-88x88.jpg
./2019/02/50724773_2016232391757166_672657363919962112_n-768x1086.jpg
./2019/02/51182287_471549576709325_1058493199745548288_n-213x300.jpg
./2019/02/51851969_2205663492789526_3200670849443037184_n-150x150.jpg
./2019/02/51936806_2302959073096343_4632907202728820736_n-1-768x402.jpg
./2019/02/52452486_1999043927065925_5289920023719051264_n-150x150.jpg
./2019/02/52599406_415092142633098_8640258517648801792_n-150x150.jpg
./2019/02/52720956_230541354422687_3803649872293265408_n-1-88x88.jpg
./2019/02/52890283_362015134639542_3461075390909382656_n-768x1077.jpg
./2019/02/53226243_2102778259813820_1269411428675092480_n-768x1085.jpg
./2019/02/villasukka4-768x566.jpg
./2019/03/52856407_397080560859932_3217572147048218624_n-203x300.jpg
./2019/03/53355769_403465573815104_9029287395370991616_n-88x88.jpg
$
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
「古い投稿のアイキャッチ画像を一括で削除したい、ただし DB とファイルに不整合が出ない形で削除したい」とのご要望だと理解しました。以下それに対する回答です(前提として、質問者さんは PHP の読み書きができるという想定で回答しています)。
DB に不整合が出ないように(=削除されたファイルへの参照が DB に残らないように)されたいとのことですので、おおよそ以下の手順で作業を進める必要があるものと思います。
- 投稿のアイキャッチ画像の情報(=メディアへの参照)を削除する
- 1 の結果参照がなくなったメディア(アイキャッチ画像として使われていたもの)を削除する
1 は、古い投稿の一覧を取得して、ループを回してそのアイキャッチ画像を 1 件ずつ削除する形になるでしょうか。 WP-CLI をお使いになれるのであれば、 wp shell
でインタラクティブシェルに入って次のように書かれるとよいかと思います。
// 2017 年以前の古い投稿一覧を取得
$posts = get_posts([
'date_query' => [
'year' => '2017',
'compare' => '<=',
],
]);
// アイキャッチ画像の情報を削除
foreach ($posts as $post) {
delete_post_thumbnail($post);
}
1 が完了したら、 2 はおそらく管理画面の「メディア(メディアライブラリ)」のページからできるので難しくはないと思います。「すべてのメディア」「画像」「未添付」「所有」という選択肢があるセレクトボックスのフィルタで 未添付
を選択し、「一括操作」で 完全に削除する
を選択して 適用
とすると、実現できるのではないでしょうか。厳密に言うと、 1 で参照がなくなったものだけを追えるわけではないので、 1 の操作をする前に 未添付
であがってくるメディアファイルをチェックしておくのがよいかと思います。
尚、上の get_posts()
の date_query
のパターンはあくまでも参考例です。お使いのサイトの投稿データの構成に合わせて適切な形に変更してください。
当然ながら危険な操作になりますので、実行される際は事前にバックアップを取るなり開発環境でテストするなりしてから臨んでください。
「 PHP の読み書きはちょっと・・・」という場合は、上のコードを理解せずにコピペで利用するのは危険なので、やめておいてください。まさにその機能を持ったプラグインを探すか人に依頼される方が断然よいと思います。
(変なことは言っていないと思って回答させていただいていますが、私の認識違い等によりこの回答の情報が間違っている可能性もあります。何か起こっても私は責任を負えないので、大前提として「万が一の場合はすべて自己責任」という認識で参考にしていただければと思います)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
下手にシステム内でファイルを削除してしまうと、後々困ることがあると思うので、まずは容量を圧迫しそうになったフォルダをエクスポートし、バックアップをとっといてから作業にとりかかるといいでしょう。
まずは、その要らないファイルを削除します。ターミナルから操作するより間違いにくくするため、一旦フォルダをエクスポートしてから、バックアップをとり複製、元ファイルから該当する不要ファイルを削除します。その際、フリーのファイル管理ソフトを使い、正規表現などを使って検索するといいです。
/2017/12/21441301_1290003087788225_806761311_o-150x150.jpg
これ以前のファイルを削除したいならば正規表現に
/\/201[67]\/\d+_[\w-\/]+.jpg/
とすれば、2017年以下の一時ファイルが全部削除されます(日付の後に数字の羅列が入りアンダーバーを挟むファイルが引っかかる)
そして、また手動で元の位置にファイルを戻せばいいと思います。
いちおう、findコマンドなどを使えるので、rmコマンドで正規表現でひっかけることも可能ですが、失敗したときに面倒なので、見える状態で削除処理はした方がいいというのが自分の経験談からの持論です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.98%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
FKM
2019/03/09 11:59
そのuploadsフォルダを見て、ファイル名だけでそのアイキャッチ画像だけを判別できるものでしょうか?
どういうファイル名で入っているのか形式を教えてください。
taro_nii_chan
2019/03/09 21:56
質問に追加いたしました。
これでアイキャッチ画像のファイル名の傾向がつかめたらそれだけファイルを削除すればいいということでしょうか?
DBとの兼ね合いも心配しているのですがそちらは大丈夫ですか?
FKM
2019/03/09 22:27
DBに画像ファイルは入ってません。紐づけたパス情報が入っているだけです。なので、フォルダの中を整理するだけで解決しそうですけどね。
任意のフォルダをエクスポートして、正規表現を使って該当するファイルを割り出すと一番いいと思います。
taro_nii_chan
2019/03/09 22:48
DBに画像ファイルは入っていないのは分かりました。でも紐づけパス情報が入ってると、DBには「ファイルが有る」と書かれていてでも実際のパスにはファイルは存在しないとなると、そこに不整合が生じて何か副作用が生じないかという疑問は依然として消えないのですが大丈夫ということでしょうか?
「任意のフォルダをエクスポートして、正規表現を使って該当するファイルを割り出す」の意味が分かりませんでした。