質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • WordPress

    8455questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

古いアイキャッチ画像を一括削除したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 106

taro_nii_chan

score 184

環境

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 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には「ファイルが有る」と書かれていてでも実際のパスにはファイルは存在しないとなると、そこに不整合が生じて何か副作用が生じないかという疑問は依然として消えないのですが大丈夫ということでしょうか?

    「任意のフォルダをエクスポートして、正規表現を使って該当するファイルを割り出す」の意味が分かりませんでした。

    キャンセル

回答 2

checkベストアンサー

+2

「古い投稿のアイキャッチ画像を一括で削除したい、ただし DB とファイルに不整合が出ない形で削除したい」とのご要望だと理解しました。以下それに対する回答です(前提として、質問者さんは PHP の読み書きができるという想定で回答しています)。

DB に不整合が出ないように(=削除されたファイルへの参照が DB に残らないように)されたいとのことですので、おおよそ以下の手順で作業を進める必要があるものと思います。

  1. 投稿のアイキャッチ画像の情報(=メディアへの参照)を削除する
  2. 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 の読み書きはちょっと・・・」という場合は、上のコードを理解せずにコピペで利用するのは危険なので、やめておいてください。まさにその機能を持ったプラグインを探すか人に依頼される方が断然よいと思います。

(変なことは言っていないと思って回答させていただいていますが、私の認識違い等によりこの回答の情報が間違っている可能性もあります。何か起こっても私は責任を負えないので、大前提として「万が一の場合はすべて自己責任」という認識で参考にしていただければと思います)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/11 20:21

    よく分かりました。

    WP-CLIというものがあることを初めて知りました。便利ですね。
    1の方はただの投稿じゃなく「The Events Calendar」というpluginのeventなので教えていただいたままの形ではなくそれに合わせた形に修正が必要そうですね。でも応用すれば出来るのは分かります。

    2の方が意外でした。

    WP-CLIを知らなかったくらいなのでオススメはされないだろうなとは思いますが、バックアップを取る、ローカルで十分にテストを行うなどしてやるか辞めておくかは自己責任で判断します。

    教えていただいてありがとうございました。

    キャンセル

  • 2019/03/14 21:50

    コメントいただきありがとうございます。反応が遅くなってしまって申し訳ありません。

    WP-CLI も 2 も、便利ですよね!ぜひぜひ事故対策をしっかりされた上でトライしてみてください :D

    キャンセル

0

下手にシステム内でファイルを削除してしまうと、後々困ることがあると思うので、まずは容量を圧迫しそうになったフォルダをエクスポートし、バックアップをとっといてから作業にとりかかるといいでしょう。

まずは、その要らないファイルを削除します。ターミナルから操作するより間違いにくくするため、一旦フォルダをエクスポートしてから、バックアップをとり複製、元ファイルから該当する不要ファイルを削除します。その際、フリーのファイル管理ソフトを使い、正規表現などを使って検索するといいです。

フリーソフト100

/2017/12/21441301_1290003087788225_806761311_o-150x150.jpg
これ以前のファイルを削除したいならば正規表現に
 /\/201[67]\/\d+_[\w-\/]+.jpg/ 
とすれば、2017年以下の一時ファイルが全部削除されます(日付の後に数字の羅列が入りアンダーバーを挟むファイルが引っかかる)

そして、また手動で元の位置にファイルを戻せばいいと思います。

いちおう、findコマンドなどを使えるので、rmコマンドで正規表現でひっかけることも可能ですが、失敗したときに面倒なので、見える状態で削除処理はした方がいいというのが自分の経験談からの持論です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/11 20:28

    教えていただいた方法でいいのか踏ん切りがつかず、どこで悩んでるのかも分からなくてコメントも出来ず失礼しました。gh640様の回答でそこがクリアになったのでそちらをベスト回答とさせていただきました。

    今考えると、2017/12/31以前のあの形式のファイルが必ずしも消したいイベントのアイキャッチ画像なのかという点と、DBとのとの兼ね合いのところで悩んでいたのだと思います。

    回答ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • WordPress

    8455questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。