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 код, а: src або id картинки.
  • WP_Error об’єкт, з повідомленням про помилку.

Використання

media_sideload_image($file, $post_id, $desc, $return);
$file
(рядок) (обов’язковий)
УРЛ картинки, яку потрібно завантажити.
$post_id
(число) (обов’язковий)
ID запису, з яким буде пов’язаний завантажений у медіатеку файл-картинка.
0– Не прикріплювати.
$desc
(рядок)

Заголовок картинки. Якщо не вказати, заголовок буде взято з URL або метаданих картинки.

Примітка: Цей параметр дійсно встановлює “TITLE” вкладення, а не опис “DESCRIPTION”. Немає можливості вказати реальний опис вкладення за допомогою цієї функції.

Типово: null

$return
(рядок)

Що повертати. Може бути:

  • html– IMG тег зображення
  • src– просто URL
  • id– ID вкладення. З WP 4.8

За замовчуванням: ‘html’

Приклади

1

#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://sworg/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Встановлено $return_type parameter .
З версії 4.8.0Встановлено ‘id’ option для $return_type parameter .
З версії 5.3.0The $post_id parameter був зроблений optional.
З версії 5.4.0Орієнтовна URL-адреса підключення міститься в _source_url post meta value.

Код media_sideload_image() WP 6.0.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 List of allowed file extensions when sideloading image from a URL.
		 *
		 * The default allowed extensions are:
		 *
		 * - `jpg`
		 * - `jpeg`
		 * - `jpe`
		 * - `png`
		 * - `gif`
		 *
		 * @ Since 5.6.0
		 *
		 * @param string[] $allowed_extensions Array of allowed file extensions.
		 * @param string $file URL з зображення на додаток.
		 */
		$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 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' );
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *