# wp_upload_dir()

URL: https://chugunov.pro/api-wordpress/functions/wp_upload_dir/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.0.0.

## Сигнатура

```php
wp_upload_dir( string|null $time = null, bool $create_dir = true, bool $refresh_cache = false ): array
```

## Описание

Проверяется опция «upload_path», которая должна задаваться относительно корневой папки сайта, и если она не пуста, то используется. Если она пуста, путь будет «WP_CONTENT_DIR/uploads». Если определена константа «UPLOADS», она переопределяет опцию «upload_path» и путь «WP_CONTENT_DIR/uploads».
URL-путь загрузок задаётся либо опцией «upload_url_path», либо с помощью константы «WP_CONTENT_URL» с добавлением «/uploads» к пути.
Если опция «uploads_use_yearmonth_folders» включена (флажок в панели настроек администрирования), используется дата. Формат: сначала год, затем месяц.
Если путь не удалось создать, возвращается ошибка с ключом «error», содержащим сообщение об ошибке. Ошибка указывает на то, что родительский каталог недоступен серверу для записи.

## Параметры

- `$time` `string|null` — необязательный, по умолчанию `null`. Время в формате 'yyyy/mm'.
- `$create_dir` `bool` — необязательный, по умолчанию `true`. Проверять и создавать ли каталог загрузок.
  
  Значение по умолчанию true для обратной совместимости.
- `$refresh_cache` `bool` — необязательный, по умолчанию `false`. Обновлять ли кэш.

## Возвращаемое значение

`array` — path stringБазовый каталог и подкаталог или полный путь к каталогу загрузок. url stringБазовый URL и подкаталог или абсолютный URL каталога загрузок. subdir stringПодкаталог, если включена опция использования папок год/месяц для загрузок. basedir stringПуть без подкаталога. baseurl stringURL-путь без подкаталога. error string|falseFalse или сообщение об ошибке.

## Исходный код

Файл: `wp-includes/functions.php:2381`

```php
function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false ) {
	static $cache = array(), $tested_paths = array();

	$key = sprintf( '%d-%s', get_current_blog_id(), (string) $time );

	if ( $refresh_cache || empty( $cache[ $key ] ) ) {
		$cache[ $key ] = _wp_upload_dir( $time );
	}

	/**
	 * Filters the uploads directory data.
	 *
	 * @since 2.0.0
	 *
	 * @param array $uploads {
	 *     Array of information about the upload directory.
	 *
	 *     @type string       $path    Base directory and subdirectory or full path to upload directory.
	 *     @type string       $url     Base URL and subdirectory or absolute URL to upload directory.
	 *     @type string       $subdir  Subdirectory if uploads use year/month folders option is on.
	 *     @type string       $basedir Path without subdir.
	 *     @type string       $baseurl URL path without subdir.
	 *     @type string|false $error   False or error message.
	 * }
	 */
	$uploads = apply_filters( 'upload_dir', $cache[ $key ] );

	if ( $create_dir ) {
		$path = $uploads['path'];

		if ( array_key_exists( $path, $tested_paths ) ) {
			$uploads['error'] = $tested_paths[ $path ];
		} else {
			if ( ! wp_mkdir_p( $path ) ) {
				if ( str_starts_with( $uploads['basedir'], ABSPATH ) ) {
					$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
				} else {
					$error_path = wp_basename( $uploads['basedir'] ) . $uploads['subdir'];
				}

				$uploads['error'] = sprintf(
					/* translators: %s: Directory path. */
					__( 'Unable to create directory %s. Is its parent directory writable by the server?' ),
					esc_html( $error_path )
				);
			}

			$tested_paths[ $path ] = $uploads['error'];
		}
	}

	return $uploads;
}
```

## История изменений

- 2.0.0 — Introduced.

## Связанные

Использует: [`_wp_upload_dir`](https://chugunov.pro/api-wordpress/functions/_wp_upload_dir/), [`wp_upload_dir`](https://chugunov.pro/api-wordpress/functions/wp_upload_dir/), [`wp_mkdir_p`](https://chugunov.pro/api-wordpress/functions/wp_mkdir_p/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`wp_basename`](https://chugunov.pro/api-wordpress/functions/wp_basename/), [`esc_html`](https://chugunov.pro/api-wordpress/functions/esc_html/), [`get_current_blog_id`](https://chugunov.pro/api-wordpress/functions/get_current_blog_id/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/).
Используется в: `WP_Debug_Data::get_wp_filesystem`, `WP_Debug_Data::get_wp_paths_sizes`, `WP_URL_Pattern_Prefixer::get_default_contexts`, [`wp_font_dir`](https://chugunov.pro/api-wordpress/functions/wp_font_dir/), `WP_REST_Attachments_Controller::edit_media_item`, [`wp_privacy_exports_dir`](https://chugunov.pro/api-wordpress/functions/wp_privacy_exports_dir/), [`wp_privacy_exports_url`](https://chugunov.pro/api-wordpress/functions/wp_privacy_exports_url/), [`wp_get_upload_dir`](https://chugunov.pro/api-wordpress/functions/wp_get_upload_dir/), [`_wp_handle_upload`](https://chugunov.pro/api-wordpress/functions/_wp_handle_upload/), `File_Upload_Upgrader::__construct`, [`wp_import_upload_form`](https://chugunov.pro/api-wordpress/functions/wp_import_upload_form/), [`wp_upload_bits`](https://chugunov.pro/api-wordpress/functions/wp_upload_bits/), [`get_space_used`](https://chugunov.pro/api-wordpress/functions/get_space_used/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_upload_dir/
