マルチサイト運用のWordPressでファイルの投稿ディレクトリを変更する

2016年3月25日Web-log・ココログ関連,WordPress

WordPressでシングルサイト運営をしている時は、ファイルのuploadディレクトリを、「ダッシュボード」→「設定」→「メディア」で変更できます。

でも、マルチサイト運用を始めると、この設定が消えちゃうんですよ。

「ネットワーク管理者」→「サイト」→「編集」→「設定」を見ると、「Upload Path」や「Fileupload Url」と言うのがあります。これを変更すれば良いのかと思ったのですが、どうも違う様です。

色々調べた末、たどり着いたのが次の投稿です。

rsm08さんが、答えを投稿してくれています。Thank you very much!

ファイルのアップロード先を、"wp-content/blogs.dir/*/files/images“に設定したいとします。"*“はマルチサイトのblogidで、"images“が変更したいアップロード先だとします。

  1. 「ネットワーク管理者」→「サイト」→「編集」→「設定」の「Uploads Use Yearmonth Folders」を「0」にする
  2. 次のコードを、テーマの"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から移転作業中です。これで、画像ファイルも移転できそうです。

Posted by お市のかた