wordpressをwebサービスとして利用するには柔軟な画像管理が必要
upload_pathはoptions apiで設定できる
wordpressの画像格納先はシングルサイトでもマルチサイト構成でも標準で同じ
wp-content\uploads
にアップロードされる。
このパスを変更するには、以下のようにwpmu_new_blogアクションで実行すればアップロード先をカスタマイズ可能。
update_option('upload_path', 'media/file1'); update_option('upload_url_path', '/media/file1');
上のように設定することで、
/media/file1/sites/4/2013/12/icon_.png
というURLに画像がアップロードされ、かつ参照することができるようになる。
退会したユーザーの画像管理
マルチサイト環境下のwordpressでは、サイト単位で画像管理を行うようにサイト毎にディレクトリ分けが設定された状態でブログサイトのセットアップがなされる。
/media/file1/sites/4/2013/12/icon_.png
上のURLの「4」という階層がマルチサイト内のサイトIDを表しており、4番のサイトの画像はすべてその配下にアップロードされる。そのため、ユーザーが退会した場合には、4のフォルダを他の場所に移動するなどして無理なく対応することが可能。
uploads_use_yearmonth_foldersで0を設定すればフラットな画像管理が可能
標準設定では、画像をアップロードするとフォルダ内が年月のフォルダで階層化される。この階層化を無効としてフラットに画像ファイルなどを管理するには以下のように設定する。
update_option('uploads_use_yearmonth_folders', 0);
個人的には年月のフォルダで階層化するのがおすすめかなと思う。月が替われば同じファイル名の画像を設定できるようになる。
symlinkでフレキシブルに画像を管理
symlinkとはシンボリックリンクのことでUnixOSでは一般的に認知された機能だが、windows環境でもvistaのころから利用できるようになった。windowsでいうショートカットファイルを作成するイメージに近い。symlinkを作成してファイル本体を、
- 異なる階層
- 別のファイルシステム
に保存しておくことができる。
/media/file1/sites/4/2013/12/icon_.png
というパスのfile1をsymlink化しておくことでより柔軟な画像管理が可能となる。file1をシンボリックリンクとして画像本体を全く異なる階層やファイルシステムで管理するには以下のようにコマンドプロンプトからsymlinkを設定する。
C:\xampp\htdocs\vhost\wordpress3.8ja\media>mklink /d file1 c:\media file1 <<===>> c:\media のシンボリック リンクが作成されました
上の設定は、画像の実体が保存されている
C:\media
に
file1
というシンボリックリンクを設定している。ファイルの実体は、
C:\media\sites\4\2013\12\icon_.png
に存在するが、
/media/file1/sites/4/2013/12/icon_.png
というURLで画像を参照することができる。
file1ではなくfile2というsymlinkを作成すれば
D:\media
という異なるドライブでファイル本体を管理することができるようになる。
おぼえておきたい運用テクニックである。