WordPressメディアファイルのアップロード先変更法
WordPressで「メディアを追加」からメディアをアップロードすると、デフォルトでは/wp-content/uploads/画像ファイルに保存されます。
WordPress本体をルート直下に置いた場合はこんな感じ。
https://yaruzou.net/uploads/contact-point-of-mouse-grip.png
メディア設定で「アップロードしたファイルを年月ベースのフォルダに整理」にしていれば、年と月も入ってきます。
「これでは長くて嫌」という時のメディアアップロード先の変更法です。このページでは、例としてアップロード先デフォルトの /wp-content/uploads から /imagesというディレクトリに変更します。
Wordpressのメディア投稿先を変更する前に
メディアファイルのアップロード先の変更自体は簡単ですが、すでに投稿した記事やデータベースのURLを変更する必要があるので手間はかかります。やることは次の5ステップです。
- 既存のメディアファイルを新しいフォルダにコピーする
- WordPressのメディアファイル保存先の設定を変更する
- 投稿済みの記事の画像URLを変更する
- データベースの内容を変更する
- テーマのカスタマイザーを利用しているなら、そちらの設定も変更。
URLの一括変更のためには置換ツールが必要になるので、置換ツールをインストールしていない人はWordpressの設定を変更する前にプラグインの準備が必要です。
準備1
新しい保存先に既存のメディアファイルを複製します。
メディアの保存先
メディアファイルの保存先は好きなところを指定できますが、場所によって方法が異なります。設定が簡単なのはWordpressをインストールしてある下のディレクトリへの変更です。
WPがwwwルートにインストールされているのなら気にする必要はありません。
メディアファイルの複製
メディアの保存先を変更した後にアップロードするファイルは、新たに設定したディレクトリに保存されます。しかし既存のファイルは以前の場所にあるので、Wordpressのメディアライブラリからは見えなくなります。
そのため既存のメディアを新しく設定したディレクトリに複製する必要があります。
画像の数が少なければサーバ管理パネルのファイルマネージャーから操作すると簡単です(画像はさくらインターネットのもの)。
準備2
投稿済み記事に掲載されている画像URLを変更するために、URLアドレスを置換できるプラグインを用意しておきます。置換ツールはなんでもいいです。僕は Search Regex を使っています
テーマのカスタマイザーから設定した画像は、改めて設定する必要があるかもしれません。
メディア投稿先の変更
準備ができたら、実際にメディアの投稿先を変更する手順に入ります。
メディア投稿先の変更法1
wp-config.phpにアップロード先を書き加える方法です。
これが手軽なんですが、Wordpressコアファイルのディレクトリが基準になっているため相対パスが機能しません。
例えばWordpressをWPというディレクトリにインストールしている場合、サイトルート直下に持っていくことができません。
アップロードフォルダをWPの設置先ディレクトリの下においたimgesという名前のフォルダにするなら、WPインストール先のwp-config.phpに下のコードを書き加えます。
wp-config.php内
define( 'UPLOADS', 'uploads' );
注)require_once(ABSPATH . 'wp-settings.php’);の前に記述してください。
WPコアファイル(本体)をウェブルートに置いている場合は
http://yaruzou.net/images
フォルダがアップロード先になります。一方、http://yaruzou.net/wpに設置していれば
http://yaruzou.net/wp/images
がメディアアップロード先になります。相対パスで../を指定すればWPのインストール先の上のディレクトリに移動できそうに思えますが、define( 'UPLOADS’, '../’.’uploads’ ); としても https://yaruzou.net/wp/../uploads となります(PHPならこれでいいはずですが、なんかだめ)。
メディア投稿先の変更法2
WordPressの詳細設定options.phpから変更する方法です。
アップロード先の指定には相対パスが使えますが、そのままでは参照用URLのパスに../が入ってしまって機能しません。そのため画像を参照するために、メディアのあるディレクトリへの絶対パスを入力する必要があります。
WordPressインストール先がウェブルートならアドレスバーに
http://ドメイン名/wp-admin/options.php
別の階層にあるならhttp://ドメイン名/WPのディレクトリ/wp-admin/options.php
と入力します。このサイトでwpに設置してあれば下のように入力します。https://yaruzou.net/wp/wp-admin/options.php
ここから詳細設定の upload_path と upload_url_path を変更します。upload_pathはwpのインストール先を基準に考えます。WPがwpというフォルダにインストールされている状態で下のツリーのようにルート直下に置きたければ ../images とします。
upload_url_pathではURLを指定します。このサイトなら下のようになります。
upload_url_path https://yaruzou.net/images
これを設定しないとアップロードはできてもメディアライブラリから見えなくなります(このページを書こうと思ったのはここではまってる人を見たことがあるからです)。
したがって、upload_pathとのセットで入力する必要があります。
options.phpでパスとURLで利用するパスを設定すると、メディア設定の下にURL入力ボックスが表示されるようになります。
うまくいかない場合は「メディア設定」で設定しては、メディアライブラリから画像URLを確認するといいです。
メディア投稿先の変更法3
WP Original Media Pathプラグインを利用します。
このプラグインを利用すると、2の方法を使わなくてもupload_pathとupload_url_pathが表示されます。
設定メニュー「WP Original Media Path」を開くと、現在の設定が表示されるので、2と同じように記述します。
ファイルへの完全な URL パス https://yaruzou.net/images
画像URL変更
すでに投稿されている記事のURLを新しいアップロードフォルダに変更します。
投稿記事の画像パスの変更
Search Regexを使って投稿記事の画像パスを一括置換します。
アドミンバーのツールからSearch Regexを起動します。
Search patternに既存のパスを、Replace patternには新しいメディアアップロードフォルダを入力します。
Source対象が “Post content" であることを確認してからsearchをします。検索結果に古いURLが表示されたのを確認してから"Replace"で完了です。
画像のある記事で画像URLが新しいものになっているかを確認してください。
カスタムフィールドにも画像情報がある場合は「Post Meta Value」についても検索・置換を行います。
結果の確認
結果の確認はメディアライブラリの画像から行います。
メディアライブラリで表示される画像URLが新しいディレクトリのものになっていれば成功です。
そしてWordpress Populer Postsなど、画像サムネイルを利用しているプラグインの画像キャッシュを消しておくといいかも。
これで終わりですが、テーマのカスタマイザーで設定したものが前のままになっている可能性はあるので、ページのソースから以前のURLへのリンクがないか確認もしてください。
もしヘッダー画像やファビコンで古いURLのものがあったら、カスタマイザーで再度登録しなおします。
後から変更するとうまくいったかの確認が手間なので、できればサイトを作成する前に設定しておきたいですね。
ディスカッション
コメント一覧
質問です。
> 僕は投稿記事にSearch Regex、データベース置換にはSearch & Replaceを使って
二つのプラグインを使っている理由はなぜでしょう? 使い分けがあるのでしょうか?
naokさん
ないですねw
Search Regexだけでいいので Serach & Replace を削って書き直しました。
この記事を書いた当時、Search Regexではカスタムフィールドの情報は消せないと思っていたため普段は確認しやすいSearch Regexを使って、カスタムフィールドはSerach & Replaceをと思い込んでいました。
ただSearch Regexを使った際に、外観カスタマイザーを使って設定したヘッダー画像かサイトアイコン画像がそのままになっていたことがあったので、そういう場合はSerach & Replaceを使うほうがいいだろうと考えていたような記憶が(外観カスタマイザーで改めて設定すればいいのですが)。
URLが隠れている可能性があるならSerach & Replaceを使うと分けて書くべきだったのにごっちゃになっていました。
ご指摘ありがとうございました。
ピンバック & トラックバック一覧
[…] https://yaruzou.net/change-media-file-path […]