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

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

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

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

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

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

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

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

add_action( 'after_switch_theme', 'codyshop_load_default_images' );
function codyshop_load_default_images() {
	$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 укажите названия всех файлов в папке по указанному образцу.

Лирика

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

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

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

Scroll Down
Fb. — Tw. — Vk.