WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Купить персональные IPV4 и IPV6 прокси

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.2.2

<?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 upload directory data with keys of 'path',
	 *                       'url', 'subdir, 'basedir', and 'error'.
	 */
	$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 785alkoweb.ru
Делаю веб руками.
Редакторы: campusboy 3411
10 комментов
  • оборудование для производ ... cайт: www.beysanmak.com/ru/kampanya.asp

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

    Ответить5.2 лет назад #
  • Дмитрий

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

    Ответить5.1 лет назад #
    • Kama7539

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

      $rrr = 'Z:\home\****\www/wp-content/uploads/2014/06';
      $rrr = str_replace('\', '/', $rrr);
      Ответить5.1 лет назад #
    • petrozavodsky785 cайт: alkoweb.ru

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

      Ответить5.1 лет назад #
  • Антон cайт: atuniversities.ru

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

    2
    Ответить11 мес назад #
    • @ campusboy3411 cайт: www.youtube.com/c/wpplus

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

      Ответить11 мес назад #
  • Доброго,

    была снята галка размещать файлы по год\месяц, потому загружались они в папку 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;
    }"
    Ответить4 мес назад #
    • petrozavodsky785 cайт: alkoweb.ru

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

      1
      Ответить4 мес назад #
      • Спасибо за ответ.

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

        Ответить4 мес назад #
        • petrozavodsky785 cайт: alkoweb.ru

          тогда самому написать плагин типо с copy, rmdir и всем этим

          Ответить4 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться