マルチサイト運用のWordPressでファイルの投稿ディレクトリを変更する
WordPressでシングルサイト運営をしている時は、ファイルのuploadディレクトリを、「ダッシュボード」→「設定」→「メディア」で変更できます。
でも、マルチサイト運用を始めると、この設定が消えちゃうんですよ。
「ネットワーク管理者」→「サイト」→「編集」→「設定」を見ると、「Upload Path」や「Fileupload Url」と言うのがあります。これを変更すれば良いのかと思ったのですが、どうも違う様です。
色々調べた末、たどり着いたのが次の投稿です。
rsm08さんが、答えを投稿してくれています。Thank you very much!
ファイルのアップロード先を、"wp-content/blogs.dir/*/files/images“に設定したいとします。"*“はマルチサイトのblogidで、"images“が変更したいアップロード先だとします。
- 「ネットワーク管理者」→「サイト」→「編集」→「設定」の「Uploads Use Yearmonth Folders」を「0」にする
- 次のコードを、テーマの"functions.php"に記入する
add_filter('upload_dir', 'my_upload_dir'); function my_upload_dir($upload) { $upload['subdir'] = "/<span style="color: #ff0000;">images</span>"; $upload['path'] .= $upload['subdir']; $upload['url'] .= $upload['subdir']; return $upload; }
これで、各サイトの"images“に、ファイルがアップロードされる様になります。
原理は、"wp-includes/functions.php"の"wp_upload_dir()"関数が、"upload_dir"と言うフックを設定しているので、"add_filter()"で追加しています。
「Uploads Use Yearmonth Folders」が「1」だと、"yyyy/mm/"と言うサブフォルダが作られます。これが、デフォルト設定です。これを解除する為に、「0」にしています。
一度アップロードしてしまえば、add_filterをコメントアウトしてもアップロード先は残っています。
//add_filter('upload_dir', 'my_upload_dir');
メディアライブラリ(アクセス先URL)は、MySQL DBの、"wp_*_posts"の"guid"に追加されるようです。
今、旧ホームページ/blogから移転作業中です。これで、画像ファイルも移転できそうです。
ディスカッション
この記事、ものすごく助かりました…!!!
お知恵をシェアしてくださってありがとうございました。
丸山さんへ、初コメントありがとうございます。
お役に立てたようで良かったです。この頃は、WordPressを使い始めの頃で、何もかも調べないとわからない状況でした。そんな中で、発見した方法です。