ワードプレスのwp_upload_dirフィルタの使用方法・解説

概要

wp_upload_dirフィルタは、WordPressのアップロードディレクトリのパスをカスタマイズするためのフックです。このフィルタを使用すると、ファイルのアップロード先となるディレクトリのパス名やURLを動的に変更することができます。これにより、特定のニーズに応じてアップロードディレクトリを管理しやすくすることができます。以下に、このフィルタが実装される際に一般的に使用される機能を示します:

  1. アップロードディレクトリのカスタム過程
  2. 特定の条件に基づくディレクトリの変更
  3. サイトのマルチサイト機能に対応するディレクトリパスの変更
  4. メディアの整理用ディレクトリの作成
  5. アップロードファイルの分類に基づく個々のディレクトリの作成
  6. 特定のユーザーに対するディレクトリの変更
  7. 年月やカテゴリに応じたサブディレクトリ生成
  8. 外部ストレージサービスとの統合によるアップロードパスの変更

構文

apply_filters( 'upload_dir', array $upload __);

パラメータ

  • $upload: アップロードディレクトリに関する情報を含む配列。
    • path: アップロードディレクトリのパス。
    • url: アップロードディレクトリへのURL。
    • subdir: サブディレクトリのパス。
    • basedir: 基本となるディレクトリパス。
    • baseurl: 基本となるサイトURL。

戻り値

  • 修正されたアップロードディレクトリに関する情報を含む配列。

関連する関数

wp_upload_dir

使用可能なバージョン

  • このフィルタは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に基づいて、異なるアップロードディレクトリを作成します。

この関数について質問する


上の計算式の答えを入力してください