WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_upload_dir() WP 2.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().

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

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

array (
  'path'    => '/home/wp-kama.ru/public_html/wp-content/uploads/2016/04',
  'url'     => 'http://wp-kama.ru/wp-content/uploads/2016/04',
  'subdir'  => '/2016/04',
  'basedir' => '/home/wp-kama.ru/public_html/wp-content/uploads',
  'baseurl' => 'http://wp-kama.ru/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

Примеры

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

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

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

#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-site.ru/public_html/wp-content/uploads/2015/08
http://wp-site.ru/wp-content/uploads/2015/08
/2015/08
/home/wp-site.ru/public_html/wp-content/uploads
http://wp-site.ru/wp-content/uploads
*/

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

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

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

Заметки

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

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

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

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

define( 'UPLOADS', trailingslashit( WP_CONTENT_DIR ).'custom_uploads_name' );

#3 Названия каталога загрузок

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

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

Заметки

  • Static. Массив. $cache
  • Static. Массив. $tested_paths

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

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

Код wp upload dir: wp-includes/functions.php WP 5.3

<?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 ( 0 === strpos( $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;
}

Cвязанные функции

Из метки: path directory (путь папка)

Еще из метки: URL (УРЛ Ссылка)

Еще из раздела: Загрузка (download upload)

petrozavodsky 794alkoweb.ru
Делаю веб руками.
Редакторы: campusboy 3433
10 комментов
  • оборудование для производ ... www.beysanmak.com/ru/kampanya.asp

    Благодарю за информацию!..

    Ответить08.Май.2014 в 00:59 #
  • Дмитрий

    Возвращает адрес с обратными слешами Z:\home****\www/wp-content/uploads/2014/06, как это исправить?

    Ответить17.Июн.2014 в 16:09 #
    • Kama7641

      Заменить обратный слэш на простой:

      $rrr = 'Z:\home\****\www/wp-content/uploads/2014/06';
      $rrr = str_replace('\', '/', $rrr);
      Ответить18.Июн.2014 в 22:00 #
    • petrozavodsky794 alkoweb.ru

      если в элементе с ключом basedir то это нормально для мащины на windows и денвера, будет, работать так, я проверял

      Ответить18.Июн.2014 в 22:30 #
  • Антон atuniversities.ru

    В 3 примере в коде baseurl, а в коменте вывод как от basedir. Опечатка)
    P.S. Спасибо за сайт и весь контент!

    2
    Ответить11.Сен.2018 в 13:36 #
    • @ campusboy3433 www.youtube.com/c/wpplus

      Антон, спасибо большое за замечание, поправлено. Удачных разработок drinks

      Ответить11.Сен.2018 в 15:17 #
  • Доброго,

    была снята галка размещать файлы по год\месяц, потому загружались они в папку uploads. В папке накопилось огромное количество фоток и это крайне неудобно. Вопрос: как упорядочить уже загруженные картинки, чтоб и в постах пути поменялись корректно. Есть способ?

    В сети нашел только это, но испытывать не стал:

    add_filter('upload_dir', 'add_date_to_upload_dir');
    
    function add_date_to_upload_dir( $param ) {
    $date = date('d');
    $dir = '/' . $date;
    $param['path'] = $param['path'] . $dir;
    $param['url'] = $param['url'] . $dir;
    return $param;
    }"
    Ответить20.Мар.2019 в 22:40 #
    • petrozavodsky794 alkoweb.ru

      Можно погуглить плагины вот такой например есть

      1
      Ответить20.Мар.2019 в 23:13 #
      • Спасибо за ответ.

        Плагины пробовал. Многие из них делают папки лишь визуально (на сервере все как было, так и остается). Задача же раскидать уже загруженные картинки (их около 10000 в папке uploads) раскидать по год/месяц (в идеале еще и день).

        Ответить21.Мар.2019 в 12:55 #
Здравствуйте, !     Войти . Зарегистрироваться