Загрузка медиафайлов при активации темы на Wordpress

4030

При разработке собственных тем почти всегда сталкиваюсь с проблемой медиафайлов. Особенно, если планируется, что тема будет использоваться широкой аудиторией. Так как сайты разные, возможность кастомизации — обычное дело.

Но, чтобы тема была удобной для всех, необходимо заложить в неё возможность гибкого управления графикой. Например, на сайте строительной тематики логично использовать изображения в виде инструмента или строительных материалов. Вряд ли кто захочет использовать иллюстрации из кулинарной, или скажем, медицинской области.

От проблемы до идеи и реализации

Если вы автор шаблонов, вы возможно, хотели бы сделать свои разработки более гибкими и функциональными. Вы не одиноки 🙂 К примеру, в зарубежных платных шаблонах предоставляется «демо-контент». Это очень удобно для конечного пользователя.

Размышляя об этом, меня посетила идея реализации подобного функционала, но по более упрощённой схеме. Если мы хотим предоставить пользователю, демонстрационные материалы, у нас есть как минимум два варианта. Первый — создать папку с медиафайлами и приложить её к файлам темы. Из неё пользователь сможет вручную загрузить материалы. Однако, такой подход создаст необходимость в документации. Вряд ли пользователь догадается о предназначении этой папки. Давайте не будем заставлять его этим заниматься.

Подход второй, на мой взгляд оптимальный. Мы также предоставляем пользователю графические файлы, но загружаем их автоматически при активации темы.

Для реализации второго способа я написал небольшую функцию, которую мы прикрепим к хуку after_switch_theme. Данный хук, в отличие от after_setup_theme срабатывает только один раз в момент активации темы. Код целиком ниже. Его необходимо разместить в начале файла function.php вашей темы.

#1 Автоматическая загрузка медиафайлов при активации темы

При активации темы проверяется наличие массива с названиями картинок и существование папки, где они хранятся. Если всё в порядке, с помощью функции media_handle_sideload загружаем их в библиотеку с медиафайлами.

После загрузки, давайте не будем занимать дисковое пространство: сначала удалим дефолтные файлы, а потом и папку. Можно приступать к настройкам темы и использовать загруженные изображения.

/*
 * Action after switch theme
 */
add_action( 'after_switch_theme', 'cody_load_default_images' );
function cody_load_default_images() {
	/*
	 * Download image to mediafiles
	 */
	$images = array( 'bg2.jpg', 'camera-min.png', 'microfon-min.png', 'music-min.png', 'radio-min.png' );

	$path = get_template_directory() . '/delete-after-setup-theme/';
	if ( $images && file_exists( $path ) ) {
		$dir = get_template_directory_uri() . '/delete-after-setup-theme/';
		foreach ( $images as $uri ) {
			$url = $dir . $uri;
			$file_array = array();

			require_once ABSPATH . 'wp-admin/includes/image.php';
			require_once ABSPATH . 'wp-admin/includes/file.php';
			require_once ABSPATH . 'wp-admin/includes/media.php';
			
			preg_match('/[^?]+\.(jpg|jpe|jpeg|gif|png)/i', $url, $matches);
			$file_array['name'] = basename($matches[0]);
			$file_array['tmp_name'] = download_url( $url );

			media_handle_sideload( $file_array, 0 );

			// delete time file
			@unlink( $file_array['tmp_name'] );
		}
		
		
		// delete dir with mediafiles
		if ( file_exists( $path ) ) {
			foreach ( glob( $path . '*' ) as $file ) {
				unlink( $file );
			}
			rmdir( $path );
		}
	}
}

Для работы данной функции вам необходимо создать папку с файлами, назвать её delete-after-setup-theme и разместить в корневую папку темы. В массиве $images укажите названия всех файлов в папке по указанному образцу.

Добавить комментарий

B I PHP JS

Made with by CodyShop