WordPress как на ладони
rgbcode is looking for WordPress developers. eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

media_sideload_image()WP 2.6.0

Загружает картинку в медиатеку WP из указанного УРЛ и прикрепляет её к посту.

Другими словами, функция загружает изображение с внешнего URL в медиатеку WP, прикрепляет его к указанной записи и возвращает <img> или УРЛ загруженной картинки.

Для работы функции во Фронт-энде нужны файлы:

require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';

Если нужно загрузить любой тип файла (а не только картинку), используйте аналогичную функцию: media_handle_sideload().

Работает на основе: media_handle_sideload(), download_url()
Хуки из функции

Возвращает

Строку|int|WP_Error.

  • строку - HTML img тега, когда $return = html (по уомолчанию).
  • строку - URL загруженного вложения, когда $return = src.
  • число - ID загруженного вложения, когда $return = id.
  • WP_Error - объект ошибки, с сообщением ошибке.

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

media_sideload_image( $file, $post_id, $desc, $return_type );
$file(строка) (обязательный)
УРЛ картинки которую нужно загрузить.
$post_id(число) (обязательный)
ID записи с которой будет связан загруженный в медиатеку файл-картинка. 0 — не прикреплять.
$desc(строка|null)

Заголовок картинки. Если не указать, заголовок будет взят из URL или из метаданных картинки.

Заметка: Этот параметр на самом деле устанавливает "TITLE" вложения, а не описание "DESCRIPTION". Нет возможности указать реальное описание для вложения с помощью этой функции.

По умолчанию: null

$return(строка)

Что возвращать. Может быть:

  • html - IMG тег картинки
  • src - просто URL
  • id - ID вложения. С WP 4.8

По умолчанию: 'html'

Примеры

2

#1 Загрузим файл для поста из внешнего УРЛ

// когда мы во фронте
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';

$url = 'http://s.w.org/style/images/wp-header-logo.png';
$post_id = 3061;
$desc = "Логотип WordPress";

$img_tag = media_sideload_image( $url, $post_id, $desc );

if( is_wp_error($img_tag) ){
	echo $img_tag->get_error_message();
}
else {
	// добавлено 
}

Такой же пример, но в другом исполнении показан в описании функции media_handle_sideload() - пример 1.

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

С версии 2.6.0 Введена.
С версии 4.2.0 Introduced the $return_type parameter.
С версии 4.8.0 Introduced the 'id' option for the $return_type parameter.
С версии 5.3.0 The $post_id parameter was made optional.
С версии 5.4.0 The original URL of the attachment is stored in the _source_url post meta value.
С версии 5.8.0 Added 'webp' to the default list of allowed file extensions.

Код media_sideload_image() WP 6.6.2

function media_sideload_image( $file, $post_id = 0, $desc = null, $return_type = 'html' ) {
	if ( ! empty( $file ) ) {

		$allowed_extensions = array( 'jpg', 'jpeg', 'jpe', 'png', 'gif', 'webp' );

		/**
		 * Filters the list of allowed file extensions when sideloading an image from a URL.
		 *
		 * The default allowed extensions are:
		 *
		 *  - `jpg`
		 *  - `jpeg`
		 *  - `jpe`
		 *  - `png`
		 *  - `gif`
		 *  - `webp`
		 *
		 * @since 5.6.0
		 * @since 5.8.0 Added 'webp' to the default list of allowed file extensions.
		 *
		 * @param string[] $allowed_extensions Array of allowed file extensions.
		 * @param string   $file               The URL of the image to download.
		 */
		$allowed_extensions = apply_filters( 'image_sideload_extensions', $allowed_extensions, $file );
		$allowed_extensions = array_map( 'preg_quote', $allowed_extensions );

		// Set variables for storage, fix file filename for query strings.
		preg_match( '/[^\?]+\.(' . implode( '|', $allowed_extensions ) . ')\b/i', $file, $matches );

		if ( ! $matches ) {
			return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL.' ) );
		}

		$file_array         = array();
		$file_array['name'] = wp_basename( $matches[0] );

		// Download file to temp location.
		$file_array['tmp_name'] = download_url( $file );

		// If error storing temporarily, return the error.
		if ( is_wp_error( $file_array['tmp_name'] ) ) {
			return $file_array['tmp_name'];
		}

		// Do the validation and storage stuff.
		$id = media_handle_sideload( $file_array, $post_id, $desc );

		// If error storing permanently, unlink.
		if ( is_wp_error( $id ) ) {
			@unlink( $file_array['tmp_name'] );
			return $id;
		}

		// Store the original attachment source in meta.
		add_post_meta( $id, '_source_url', $file );

		// If attachment ID was requested, return it.
		if ( 'id' === $return_type ) {
			return $id;
		}

		$src = wp_get_attachment_url( $id );
	}

	// Finally, check to make sure the file has been saved, then return the HTML.
	if ( ! empty( $src ) ) {
		if ( 'src' === $return_type ) {
			return $src;
		}

		$alt  = isset( $desc ) ? esc_attr( $desc ) : '';
		$html = "<img src='$src' alt='$alt' />";

		return $html;
	} else {
		return new WP_Error( 'image_sideload_failed' );
	}
}
12 комментариев
Полезные 4 Все
    Войти