概要
wp_upload_dir
フィルタは、WordPressのアップロードディレクトリのパスをカスタマイズするためのフックです。このフィルタを使用すると、ファイルのアップロード先となるディレクトリのパス名やURLを動的に変更することができます。これにより、特定のニーズに応じてアップロードディレクトリを管理しやすくすることができます。以下に、このフィルタが実装される際に一般的に使用される機能を示します:
- アップロードディレクトリのカスタム過程
- 特定の条件に基づくディレクトリの変更
- サイトのマルチサイト機能に対応するディレクトリパスの変更
- メディアの整理用ディレクトリの作成
- アップロードファイルの分類に基づく個々のディレクトリの作成
- 特定のユーザーに対するディレクトリの変更
- 年月やカテゴリに応じたサブディレクトリ生成
- 外部ストレージサービスとの統合によるアップロードパスの変更
構文
apply_filters( 'upload_dir', array $upload __);
パラメータ
$upload
: アップロードディレクトリに関する情報を含む配列。path
: アップロードディレクトリのパス。url
: アップロードディレクトリへのURL。subdir
: サブディレクトリのパス。basedir
: 基本となるディレクトリパス。baseurl
: 基本となるサイトURL。
戻り値
- 修正されたアップロードディレクトリに関する情報を含む配列。
関連する関数
使用可能なバージョン
- このフィルタはWordPress 2.0.0以降で使用可能です。
コアファイルのパス
wp-includes/functions.php
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプルコード1: カスタムアップロードディレクトリを作成
add_filter('upload_dir', 'custom_upload_dir');
function custom_upload_dir($uploads) {
$uploads['subdir'] = '/custom_directory';
$uploads['path'] = $uploads['basedir'] . '/custom_directory';
$uploads['url'] = $uploads['baseurl'] . '/custom_directory';
return $uploads;
}
このサンプルコードは、アップロードディレクトリに「custom_directory」というサブディレクトリを追加します。
サンプルコード2: 現在のユーザーに基づくアップロードディレクトリの変更
add_filter('upload_dir', 'user_based_upload_dir');
function user_based_upload_dir($uploads) {
$user = wp_get_current_user();
$uploads['subdir'] = '/' . $user->user_login;
$uploads['path'] = $uploads['basedir'] . '/' . $user->user_login;
$uploads['url'] = $uploads['baseurl'] . '/' . $user->user_login;
return $uploads;
}
このサンプルコードは、ログイン中のユーザーのユーザー名に基づいて、アップロードディレクトリを個別に設定します。
サンプルコード3: 年月に基づくファイルの整理
add_filter('upload_dir', 'year_month_upload_dir');
function year_month_upload_dir($uploads) {
$uploads['subdir'] = '/' . date('Y') . '/' . date('m');
$uploads['path'] = $uploads['basedir'] . '/' . date('Y') . '/' . date('m');
$uploads['url'] = $uploads['baseurl'] . '/' . date('Y') . '/' . date('m');
return $uploads;
}
このサンプルコードは、現在の年と月に基づいてアップロードディレクトリを整理します。
サンプルコード4: アップロードされたファイルの拡張子に基づくディレクトリの変更
add_filter('upload_dir', 'extension_based_upload_dir');
function extension_based_upload_dir($uploads) {
$file_type = $_FILES['async_upload']['type'];
if (strpos($file_type, 'image/') === 0) {
$uploads['subdir'] = '/images';
} elseif (strpos($file_type, 'video/') === 0) {
$uploads['subdir'] = '/videos';
} else {
$uploads['subdir'] = '/others';
}
$uploads['path'] = $uploads['basedir'] . $uploads['subdir'];
$uploads['url'] = $uploads['baseurl'] . $uploads['subdir'];
return $uploads;
}
このサンプルコードは、アップロードされるファイルのタイプに基づいて異なるサブディレクトリを作成します。
サンプルコード5: マルチサイト対応のアップロードディレクトリのカスタマイズ
add_filter('upload_dir', 'multi_site_upload_dir');
function multi_site_upload_dir($uploads) {
if (is_multisite()) {
$uploads['subdir'] = '/sites/' . get_current_blog_id(); // 現在のブログIDに基づくディレクトリ
}
$uploads['path'] = $uploads['basedir'] . $uploads['subdir'];
$uploads['url'] = $uploads['baseurl'] . $uploads['subdir'];
return $uploads;
}
このサンプルコードは、マルチサイト環境で現在のブログIDに基づいて、異なるアップロードディレクトリを作成します。