rs_upload_from_url

Функция rs_upload_from_url загружает файл с указанного URL-адреса в медиабиблиотеку WordPress и возвращает ID вложения.

Аргументы функции:

  • $url (обязательный) — URL-адрес файла для загрузки в медиабиблиотеку.
  • $title (необязательный) — заголовок для создаваемого вложения.

Функция использует следующие вспомогательные функции из WordPress:

  • download_url() — загружает файл с указанного URL-адреса во временный файл на сервере и возвращает путь к этому файлу.
  • pathinfo() — возвращает информацию о пути к файлу (имя файла, расширение и т.д.).
  • mime_content_type() — определяет тип MIME файла на основе его содержимого.
  • sanitize_mime_type() — очищает и приводит тип MIME в безопасное значение.
  • media_handle_sideload() — загружает файл в медиабиблиотеку WordPress «боковым» способом, то есть таким же образом, как обрабатывается файл, загруженный через стандартный механизм загрузки.

Функция проверяет расширение файла и тип MIME, и если необходимо, добавляет расширение. Если расширение все еще не может быть определено, функция возвращает false.

Если загрузка прошла успешно, функция вернет ID вложения (целое число), иначе она вернет false.

Пример использования:

$url = 'http://example.com/image.jpg';
$title = 'My Image';
$attachment_id = rs_upload_from_url( $url, $title );
if ( $attachment_id ) {
    // Вложение успешно загружено
} else {
    // Произошла ошибка загрузки вложения
}
<?php
function rs_upload_from_url( $url, $title = null ) {
	require_once( ABSPATH . "/wp-load.php");
	require_once( ABSPATH . "/wp-admin/includes/image.php");
	require_once( ABSPATH . "/wp-admin/includes/file.php");
	require_once( ABSPATH . "/wp-admin/includes/media.php");
	// Download url to a temp file
	$tmp = download_url( $url );
	if ( is_wp_error( $tmp ) ) return false;
	// Get the filename and extension ("photo.png" => "photo", "png")
	$filename = pathinfo($url, PATHINFO_FILENAME);
	$extension = pathinfo($url, PATHINFO_EXTENSION);
	// An extension is required or else WordPress will reject the upload
	if ( ! $extension ) {
		// Look up mime type, example: "/photo.png" -> "image/png"
		$mime = mime_content_type( $tmp );
		$mime = is_string($mime) ? sanitize_mime_type( $mime ) : false;
		// Only allow certain mime types because mime types do not always end in a valid extension (see the .doc example below)
		$mime_extensions = array(
			// mime_type         => extension (no period)
			'text/plain'         => 'txt',
			'text/csv'           => 'csv',
			'application/msword' => 'doc',
			'image/jpg'          => 'jpg',
			'image/jpeg'         => 'jpeg',
			'image/gif'          => 'gif',
			'image/png'          => 'png',
			'video/mp4'          => 'mp4',
		);
		
		if ( isset( $mime_extensions[$mime] ) ) {
			// Use the mapped extension
			$extension = $mime_extensions[$mime];
		}else{
			// Could not identify extension
			@unlink($tmp);
			return false;
		}
	}
	// Upload by "sideloading": "the same way as an uploaded file is handled by media_handle_upload"
	$args = array(
		'name' => "$filename.$extension",
		'tmp_name' => $tmp,
	);
	// Do the upload
	$attachment_id = media_handle_sideload( $args, 0, $title);
	// Cleanup temp file
	@unlink($tmp);
	// Error uploading
	if ( is_wp_error($attachment_id) ) return false;
	// Success, return attachment ID (int)
	return (int) $attachment_id;
}

Проверенный хостинг

Beget

Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.

Timeweb

Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.

Заказать кастомную разработку

Корпоративные порталы
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Мобильные приложения
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Разработка ИТ-продукта
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM