WordPress как на ладони
Плагин рекламы для WordPress wordpress jino

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(), download_url()

Хуков нет.

Возвращает

Строка/WP_Error. HTML img тег или объект WP_Error, с сообщением ошибки. Если в параметре $return указать 'src', то вместо тега вернет УРЛ картинки.

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

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

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

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

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

Примеры

#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 );

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

Код media sideload image: wp-admin/includes/media.php WP 4.8

<?php
function media_sideload_image( $file, $post_id, $desc = null, $return = 'html' ) {
	if ( ! empty( $file ) ) {

		// Set variables for storage, fix file filename for query strings.
		preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches );
		if ( ! $matches ) {
			return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) );
		}

		$file_array = array();
		$file_array['name'] = 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;
		// If attachment id was requested, return it early.
		} elseif ( $return === 'id' ) {
			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 ( $return === 'src' ) {
			return $src;
		}

		$alt = isset( $desc ) ? esc_attr( $desc ) : '';
		$html = "<img src='$src' alt='$alt' />";
		return $html;
	} else {
		return new WP_Error( 'image_sideload_failed' );
	}
}

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

Из метки: upload (файловая система file загрузка)

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

media_sideload_image 4 комментария
  • Дмитрий

    Господа, прошу помощи. Просьба не пинать. Уже часов 8 пишу примитивную функцию. Делаю страницу редактирования поста во фронте. Там подгружается миниатюра. На данный момент задача, драг энд дропом заменить эту миниатюру. Проблемы 2. event.datatransfer не имеет пути к файлу, только имя, тип и размер. Во вторых. Даже если опустить тот факт что я не могу передать УРЛ загружаемого изображения я пробую с помощью media_sideload_image() загрузить просто УРЛ из интернета и вернуть его УРЛ. На первой же строчке require_once(ABSPATH .'wp-admin/includes/media.php'); выдает ошибку. И так на всех трех.

    Ответить1.3 года назад #
  • А к меткам можно таким образом прикреплять?

    Ответитьгод назад #
  • Summersid cайт: summersid.cu.cc

    img тег картинки возвращает только с атрибутами src и alt negative
    Мне бы еще class возвращало...

    Ответить3 месяца назад #

Здравствуйте, !

Ваш комментарий