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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

Q&A

解決済

2回答

1217閲覧

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

taro_nii_chan

総合スコア207

WordPress

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

0グッド

0クリップ

投稿2019/03/09 00:22

編集2019/03/09 12:53

環境

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 $

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2019/03/09 02:59

そのuploadsフォルダを見て、ファイル名だけでそのアイキャッチ画像だけを判別できるものでしょうか? どういうファイル名で入っているのか形式を教えてください。
taro_nii_chan

2019/03/09 12:56

質問に追加いたしました。 これでアイキャッチ画像のファイル名の傾向がつかめたらそれだけファイルを削除すればいいということでしょうか? DBとの兼ね合いも心配しているのですがそちらは大丈夫ですか?
FKM

2019/03/09 13:27

DBに画像ファイルは入ってません。紐づけたパス情報が入っているだけです。なので、フォルダの中を整理するだけで解決しそうですけどね。 任意のフォルダをエクスポートして、正規表現を使って該当するファイルを割り出すと一番いいと思います。
taro_nii_chan

2019/03/09 13:48

DBに画像ファイルは入っていないのは分かりました。でも紐づけパス情報が入ってると、DBには「ファイルが有る」と書かれていてでも実際のパスにはファイルは存在しないとなると、そこに不整合が生じて何か副作用が生じないかという疑問は依然として消えないのですが大丈夫ということでしょうか? 「任意のフォルダをエクスポートして、正規表現を使って該当するファイルを割り出す」の意味が分かりませんでした。
guest

回答2

0

ベストアンサー

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

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

  1. 投稿のアイキャッチ画像の情報(=メディアへの参照)を削除する
  2. 1 の結果参照がなくなったメディア(アイキャッチ画像として使われていたもの)を削除する

1 は、古い投稿の一覧を取得して、ループを回してそのアイキャッチ画像を 1 件ずつ削除する形になるでしょうか。 WP-CLI をお使いになれるのであれば、 wp shell でインタラクティブシェルに入って次のように書かれるとよいかと思います。

php

1// 2017 年以前の古い投稿一覧を取得 2$posts = get_posts([ 3 'date_query' => [ 4 'year' => '2017', 5 'compare' => '<=', 6 ], 7]); 8 9// アイキャッチ画像の情報を削除 10foreach ($posts as $post) { 11 delete_post_thumbnail($post); 12}

1 が完了したら、 2 はおそらく管理画面の「メディア(メディアライブラリ)」のページからできるので難しくはないと思います。「すべてのメディア」「画像」「未添付」「所有」という選択肢があるセレクトボックスのフィルタで 未添付 を選択し、「一括操作」で 完全に削除する を選択して 適用 とすると、実現できるのではないでしょうか。厳密に言うと、 1 で参照がなくなったものだけを追えるわけではないので、 1 の操作をする前に 未添付 であがってくるメディアファイルをチェックしておくのがよいかと思います。

尚、上の get_posts()date_query のパターンはあくまでも参考例です。お使いのサイトの投稿データの構成に合わせて適切な形に変更してください。

当然ながら危険な操作になりますので、実行される際は事前にバックアップを取るなり開発環境でテストするなりしてから臨んでください。

「 PHP の読み書きはちょっと・・・」という場合は、上のコードを理解せずにコピペで利用するのは危険なので、やめておいてください。まさにその機能を持ったプラグインを探すか人に依頼される方が断然よいと思います。

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

投稿2019/03/10 11:32

gh640

総合スコア1407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2019/03/11 11:21

よく分かりました。 WP-CLIというものがあることを初めて知りました。便利ですね。 1の方はただの投稿じゃなく「The Events Calendar」というpluginのeventなので教えていただいたままの形ではなくそれに合わせた形に修正が必要そうですね。でも応用すれば出来るのは分かります。 2の方が意外でした。 WP-CLIを知らなかったくらいなのでオススメはされないだろうなとは思いますが、バックアップを取る、ローカルで十分にテストを行うなどしてやるか辞めておくかは自己責任で判断します。 教えていただいてありがとうございました。
gh640

2019/03/14 12:50

コメントいただきありがとうございます。反応が遅くなってしまって申し訳ありません。 WP-CLI も 2 も、便利ですよね!ぜひぜひ事故対策をしっかりされた上でトライしてみてください :D
guest

0

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

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

フリーソフト100

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

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

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

投稿2019/03/09 14:38

編集2019/03/09 14:38
FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2019/03/11 11:28

教えていただいた方法でいいのか踏ん切りがつかず、どこで悩んでるのかも分からなくてコメントも出来ず失礼しました。gh640様の回答でそこがクリアになったのでそちらをベスト回答とさせていただきました。 今考えると、2017/12/31以前のあの形式のファイルが必ずしも消したいイベントのアイキャッチ画像なのかという点と、DBとのとの兼ね合いのところで悩んでいたのだと思います。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問