WordPress как на ладони
rgbcode is looking for WordPress developers. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

wp_upload_dir()WP 2.0.0

Получает данные о каталоге (папке) загрузок в виде массива параметров.

Папка загрузок как правило называется uploads и расположена в папке контента wp-contents.

Проверяет опцию "upload_path", которая должна быть путем от корня сайта и если опция установлена, будет использована она, а если не установлена, тогда путь будет равен: WP_CONTENT_DIR/uploads. Однако, если определена константа UPLOADS, тогда она перепишет опцию upload_path и путь WP_CONTENT_DIR/uploads.

УРЛ каталога загрузок устанавливается через опцию upload_url_path или используется конструкция WP_CONTENT_URL/uploads.

Если опция uploads_use_yearmonth_folders установлена (галочка в настройках медиафайлов в админ-панели), тогда к путям и ссылкам будет добавлен текущий год и месяц, в формате /ГГГГ/ММ.

Если WordPress не сможет определить путь, тогда элемент массива error будет содержать сообщение об ошибке. Ошибка может быть, когда родительская директория запрещает создавать дочерние (не хватает прав на запись).

Более быстрый аналог этой функции: wp_get_upload_dir().

Мультисайт

Для мультисайта функция вернет данные папки загрузок текущего сайта. Например:

[basedir] => /var/app/www/wp-content/uploads/sites/2
[baseurl] => https://example.com/wp-content/uploads/sites/2

Заметки

#1 Функция создает папки

При использовании функция wp_upload_dir() создает поддиректорию, если её не существует. Если указан параметр $time, то будет создана указанная поддиректория, в противном случае директория текущего месяца. Чтобы директория была создана не обязательно нужно сохранить файл.

#2 Название папки

Если вам нужно перенести папку загрузок /uploads, вам нужно определить константу UPLOADS в файле wp-config.php. Например так:

define( 'UPLOADS', trailingslashit( WP_CONTENT_DIR ).'custom_uploads_name' );
#3 Названия папки uploads

Чтобы получить название папки загрузок, относительно каталога контента, обычно можно использовать такую конструкцию. Тут подразумевается, что каталог загрузок находится в каталоге контента:

$upload_dir_name = false;
if ( defined( 'UPLOADS' ) ) {
	$upload_dir_name = = str_replace( trailingslashit( WP_CONTENT_DIR ), '', untrailingslashit( UPLOADS ) );
}

ВАЖНО: константа UPLOADS не определена по дефолту в ВП. Она может быть определена только для мультисайта и только если установлена опция ms_files_rewriting=1, но обычно значение этой опции 0 и UPLOADS константа не определена. Подробнее смотрите код функции ms_upload_constants().

Работает на основе: _wp_upload_dir()
Основа для: wp_get_upload_dir(), wp_upload_bits()
1 раз — 0.000233 сек (быстро) | 50000 раз — 0.23 сек (очень быстро) | PHP 7.0.5, WP 4.5
Хуки из функции

Возвращает

Массив. Массив данных о каталоге загрузок:

array (
  'path'    => '/home/example.com/public_html/wp-content/uploads/2016/04',
  'url'     => 'http://example.com/wp-content/uploads/2016/04',
  'subdir'  => '/2016/04',
  'basedir' => '/home/example.com/public_html/wp-content/uploads',
  'baseurl' => 'http://example.com/wp-content/uploads',
  'error'   => false,
)

где

  • path - путь на сервере до каталога загрузок с учетом года и месяца, если соответствующая опция включена в админке.

  • url - УРЛ каталога загрузок с учетом года и месяца, если соответствующая опция включена в админке.

  • subdir - название конечного каталога загрузок внутри wp-content/uploads.

  • basedir - путь на сервере до общего каталога загрузок.

  • baseurl - УРЛ до общего каталога загрузок.

  • error - в случае ошибки при получении данных элемент массива error будет равен true.

Использование

$upload_dir = wp_upload_dir( $time );
$time(строка)
Поддиректория каталога загрузок. Обычно это папки /ГГГГ/ММ в каталоге uploads. Тут мы можем указать любую поддиректорию в формате /ГГГГ/ММ, от этого параметра зависят данные получаемого массива: [path] [url] [subdir].
По умолчанию: null (папка текущего месяца)
$create_dir(логический)
Нужно ли проверять и создавать каталог загрузок если его нет?
По умолчанию: true
$refresh_cache(логический)
Нужно ли обновить кэш? Результат работы функции сохраняется и отдается из кэша. Если установить тут true, то кэш будет пересоздан.
По умолчанию: false

Примеры

0

#1 Что вернет массив

$upload_dir = wp_upload_dir();
print_r( $upload_dir );

// вернет:
/*
Array
(
	[path] => /home/k/wp-example.com/public_html/wp-content/uploads/2014/02
	[url] => http://wp-example.com/wp-content/uploads/2014/02
	[subdir] => /2014/02
	[basedir] => /home/k/wp-example.com/public_html/wp-content/uploads
	[baseurl] => http://wp-example.com/wp-content/uploads
	[error] =>
)
*/
0

#2 Получение всех элементов в виде объекта

Удобнее получать элементы в виде объекта, так с ними удобно работать:

$upload_dir = (object) wp_upload_dir();

if( ! $upload_dir->error ){
	echo $upload_dir->path ."\n";
	echo $upload_dir->url ."\n";
	echo $upload_dir->subdir ."\n";
	echo $upload_dir->basedir ."\n";
	echo $upload_dir->baseurl ."\n";
}

/* получим:
/home/wp-example.com/public_html/wp-content/uploads/2015/08
http://wp-example.com/wp-content/uploads/2015/08
/2015/08
/home/wp-example.com/public_html/wp-content/uploads
http://wp-example.com/wp-content/uploads
*/
0

#3 УРЛ каталога загрузок WordPress

Получим УРЛ каталога загрузок WordPress:

$upload_dir = wp_upload_dir();
echo $upload_dir['baseurl']; //> http://wp-example.com/wp-content/uploads

Список изменений

С версии 2.0.0 Введена.

Код wp_upload_dir() WP 6.4.3

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;
}
petrozavodsky 841alkoweb.ru
Делаю веб руками.
Редакторы: campusboy 4737, Kama 9600
8 комментариев
    Войти