コンテンツにスキップ

WordPress のメディアファイルのサブフォルダ分けの設定

メインイメージ

WordPress のメディアファイルのサブフォルダ分けの設定方法について説明します。

WordPress ではメディアファイルの保存先ディレクトリのルールを管理画面やコードで変更することができます。

確認時のバージョン

  • WordPress 6.6.1

管理画面での設定

管理画面上からサブフォルダ分けを行うかどうかを設定できます。 利用できる選択肢は、サブフォルダ分けを年月のフォルダを使って行うか、まったく行わないかの 2 つです。

設定の変更方法は次のとおりです。

サイドメニューの「設定」→「メディア」をクリックします。

WordPress 管理画面メニュー「設定」→「メディア」

メディア設定ページが開くので、「ファイルアップロード」の「アップロードしたファイルを年月ベースのフォルダーに整理」のチェックボックスのチェックをセットして「変更を保存」ボタンをクリックします。

WordPress 管理画面「メディア設定」→「ファイルアップロード」→「アップロードしたファイルを年月ベースのフォルダーに整理」

例えば、ファイルのアップロード日が 2028 年 5 月でファイル名が sample.webp の場合、チェックを入れたときと外したときの保存先は次のとおりになります。

チェック 保存先
チェックを入れる wp-content/uploads/2028/05/sample.webp
チェックを外す wp-content/uploads/sample.webp

デフォルトではチェックが入った状態になっています。

Note

アップロードされたファイルと同名のファイルが同じフォルダにすでに存在する場合、 WordPress は後からアップロードされたファイルのファイル名の末尾に -1 -2 といった数字を自動的に追加してファイル名の衝突を回避します。 この自動で行われるファイル名変更をなるべく避けたいなら、チェックを入れてサブフォルダ分けを行った方がよいです。

コードを使った設定

コードを書く選択肢があるなら、コードを書くとより細かいカスタマイズが可能です。

具体的には upload_dir というフィルタフックを使用してアップロード先・サブフォルダの設定が変更できます。

例えば次のように書くと、アップロードファイルの保存先をユーザーごとに異なるフォルダに整理できます。

functions.php:

add_filter( 'upload_dir', 'themeslug_upload_dir' );

/**
 * メディアファイルをユーザーごとに別のフォルダに分類する
 */
function themeslug_upload_dir( $uploads ) {
  // 未ログインユーザーの場合は anonymous にフォールバック:
  $user_id = get_current_user_id() ?: 'anonymous';

  $subdir = "/users/${user_id}" . $uploads['subdir'];

  $uploads['path'] = $uploads['basedir'] . $subdir;
  $uploads['url'] = $uploads['baseurl'] . $subdir;

  return $uploads;
}

例えばユーザーの ID が 5 でファイル名が sample.webp で、なおかつ「アップロードしたファイルを年月ベースのフォルダーに整理」のチェックボックスにチェックが入っている場合、ファイルの保存先は次のようになります。

wp-content/uploads/users/5/2028/05/sample.webp

Note

これらの方法でアップロード先のサブフォルダを変更した場合、すでにアップロードされているファイルには影響せず、設定変更後にアップロードされたファイルにのみ影響します。

既存のファイルを移動したい場合はその機能を提供するプラグインを使用するか、手作業でファイルの移動とデータベースの値の書き換えを行う必要があります。

WordPress.org 関連ページ