arison.jp arison.jp blog - 現在をたのしく、未来をたのしむ。日常の思い出兼備忘録。

【WordPress】メディア保存先ディレクトリを変えてみた

せっかくの休みなので、Wordpressのメンテナンスを行った。
最近どうも、メディアのアップロードに失敗してしまうからだ。
1つのディレクトリに8000ファイルも置いているからだろうかと思って
このたび、メディアファイルの保存先を一気に変更してみた。

[wc_toggle title=”結論” layout=”box”]

アップロードしていた画像が大きすぎたのが原因だった。
3000px × 2000px程度のメガ越えのファイルをアップロードしていたのが原因。

スマフォで撮った画像をそのままアップしていたのが根本原因でした。

[/wc_toggle]

結論はそうだったんですが、メディアの保存先は変更しておきたかったので、実行にうつしたわけです。
ぶっちゃけ2,3日かかっています。

【前準備】
(1) DBのバックアップ (プラグインでDBバックアップ)
(2) 画像のバックアップ。 (FTPでダウンロード)

 

【設定変更】

[wc_toggle title=”(1) ファイルの自動作成をやめる” layout=”box”]

WordPressは1つの画像につき、サムネイルや大中小の画像を自動で作成します。
ファイルサイズは膨らむし、わけのわからないファイルが増えるのが嫌だったので設定を変更。

「設定」のなかの「メディア」を押下して、「メディア設定」画面へ。
サムネイルのサイズ、中サイズ、大サイズを全て0に。

[/wc_toggle]

[wc_toggle title=”(2) アップロードしたファイルを年月ベースに分ける” layout=”box”]

「設定」のなかの「メディア」を押下して、「メディア設定」画面へ。
ファイルアップロードの項目で
アップロードしたファイルを年月ベースのフォルダに整理 にチェックをつける

これだけで、メディアの保存先に「YYYY/MM」で保存してくれます。
1月の場合は2桁の01になります。(1にならないところがありがたい)

[/wc_toggle]

 

【作業1】不要そうなファイルが多かったので削除およびディレクトリ整理。

[wc_toggle title=”(1)自動作成した画像を一気に削除。(FTPで削除)” layout=”box”]

だいたいファイルサイズで間引けました。
脳筋作業でした。

[/wc_toggle]

[wc_toggle title=”(2)元画像を年別に分ける” layout=”box”]

2014年より前は年ごとに分けました。
月で分けるとめんどいので。2015年だけ月別。

[/wc_toggle]

[wc_toggle title=”【作業2】メディアの格納先とDBを紐付ける。” layout=”box”]

メディアの格納先は変更したものの、DBの中には変更前のメディアの格納先が残っています。
そこを替える必要があります。
※wp_posts と wp_postmeta を変更する必要があります。

自分のサイトはxreaのレンタルサーバなのでxrea経由でPhpMyAdminを使ってDBアクセス。
wp_posts と wp_postmeta をエクスポート、それぞれ、wp_posts.sql と wp_postmeta.sql。

[/wc_toggle]

 

[wc_toggle title=”【作業2-1】wp_postsの編集” layout=”box”]

wp_posts は本文の記事、各メディアの添付資料のパスが保存されています。(作業中にわかってきた)
ざっくりいうと、’attachment’ って記述があると添付資料です。

絶対パス形式になっているので、
//arison.jp/wordpress/wp-content/uploads/hoge.jpg となっていました。
//arison.jp/wordpress/wp-content/uploads/YYYY/hoge.jpg と変更すればOK。

2015年のみ
//arison.jp/wordpress/wp-content/uploads/YYYY/MM/hoge.jpg と変更すればOK。

とりあえず、wp_posts を少しいじってはインポート、画面確認、エクスポートの繰り返し。
ええ、ビビリなので、バックアップとりながら少しずつやっていきました。
どうせ、個人サイトなので・・・と本番環境を直に触っているわけです。

この時に、記事の本文に縮小画像が作られていたので、気がついたパターンは削除。
hoge-200×300.jpg とかみたいなものを hoge.jpg に一括置換。

正規表現と影響範囲の把握がめんどくさかったので、
「-200×300.jpg」を「.jpg」に変換するなど脳筋で対応。

これで、だいたい本文と添付資料の修正は完了。
でも、このままだとキャッチアップの画像は出ないし、編集画面も表示されない。

編集画面に画像を表示するためには、サムネイルを作成しておかねばならなかった。
ということで、編集画面に画像が表示されないのは不便なので、結局サムネイルは再作成することにしました。

[/wc_toggle]

 

[wc_toggle title=”【作業2-1】wp_postmetaの編集” layout=”box”]

ざっくりいうと、’_wp_attached_file’ って記述があるところを修正します。

xx, xx, ‘_wp_attached_file’, ‘hoge.jpg’ を
xx, xx, ‘_wp_attached_file’, ‘YYYY/hoge.jpg’ と変更すればOK。

2015年のみ
xx, xx, ‘_wp_attached_file’, ‘YYYY/MM/hoge.jpg’ と変更すればOK。

‘_wp_attachment_metadata’ も変更する必要があります。
ここの変更がちょっとめんどいし、あまりわかっていない。

(xx, xx, ‘_wp_attachment_metadata’,
‘a:6:{s:5:”width”;i:400;s:6:”height”;i:240;s:4:”file”;s:22:”2010/100220_211201.jpg”;
s:5:”sizes”;a:1:{s:9:”thumbnail”;a:5:{s:4:”file”;s:25:”100220_211201-200×120.jpg”;
s:5:”width”;i:200;s:6:”height”;i:120;s:9:”mime-type”;s:10:”image/jpeg”; ・・・以下略

最初のパスはディレクトリ付きで YYYY/hoge.jpg だけど、次はファイル名だけの hoge-200×120.jpg でいいみたいな。
元画像と縮小サイズの設定などが記述されているんだと自分の中で認識しています。
チョイ調べてみたけど、よくわからなかった。

ぶっちゃけトライアンドエラーの気持ちでインポート、画面確認、エクスポートの繰り返し。
ええ、ビビリなので、バックアップとりながら少しずつやっていきました。
どうせ、個人サイトなので・・・と本番環境を直に触っているわけです。

はい、wp_postsの編集のときと一緒です。

これで、キャッチアップも見えるようになってきたんだけど、編集画面の画像は表示されません。

正直、wp_postsのときもそうだけど、ファイル名の前にディレクトリをつけるのだけでもめんどくさい。
つけてはだめなところもあるし。幸い、ファイル名がYYYYになっているのが多かったので、割と簡単にできたけど。

[/wc_toggle]

[wc_toggle title=”【作業3】サムネイルの再作成” layout=”box”]

結局、サムネイルを作成することに。

「設定」のなかの「メディア」を押下して、「メディア設定」画面へ。
サムネイルのサイズ、中サイズ、大サイズを全て0から
サムネイルのサイズは200×200
大サイズは1024×1024にしました。

プラグインの Regenerate Thumbnails を使用してサムネイルのサイズを再作成

これで、編集画面の画像も表示できて解決。

で、ファイルの整理もできていざアップロード。
でも失敗。

原因は、前述したサイズの問題。
プラグインでサムネイルを作成するときも失敗していたので気がつきました。
サイズが大きすぎたのだと。

で、ファイルをごそっと脳筋でサイズ変更。ペイントでも十分可能な作業です。
で完全に修正完了。

ちなみに、記事の投稿からアップロードすると、その記事の年月でファイルの年月が保存されます。
2013年1月の記事からファイルをアップロードすると2013/01のしたに保存されます。

まあ、移行した既存のは全て2013になって、これから2013年であげるのは2013/MMになるけど
2013年の画像を上げることなんてほぼないでしょうと。

[/wc_toggle]

【最終的な問題点】

WordPressのメディアの保存先を変更し、DBも変更したんだけど、
WordPressの画像を使用しているSNSや他サイトからの参照は、ことごとく404になります。

場合によってはリダイレクトを設定する必要があります。
それか、WordPressからは参照しないけど、もとあった場所においておくか。

About arison

大都会岡山の南部にある玉野市生まれ。 大都会岡山のIT会社(目標は大都会No.1)でコンピュータとお客を相手に日夜格闘中。 関東出張中はグルメブログ。 基本的に遊び人のおっさん。 ライフハックとガンダム好き。ギガフロート玉野を浸透中。

01. 11月 2015 by arison
Categories: プログラミング, サイト運営 | Tags: , | Leave a comment

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください