Я хотел бы предложить своим посетителям возможность загрузки всей фотогалереи (отображаемой на выделенных страницах [gallery]) в виде ZIP-файла, отображаемого внизу каждой страницы галереи. - Полноразмерное изображение должно быть включено.
Дэвид Уолш дал код в своем посте здесь застегивать файлы , но у меня возникают проблемы с интеграцией , что с функциями Wordpress.
Я знаю, что есть плагин для скачивания галереи NextGEN, но я не могу его использовать, так как использую встроенные функции галереи WordPress.
Аналогичный вопрос с альтернативным (ручной метод) завершения вышеупомянутого можно найти здесь: Плагин для загрузки вложенных медиа-файлов?
Любая помощь будет принята с благодарностью. Благодарю.
Ответы:
Сначала вы должны получить изображения. Как получить все изображения галереи описано здесь .
WordPress использует два класса для распаковки файлов. PHP встроен
ZipArchive()
(см. Дэвид Уолш). И PclZip , вы можете найти этот класс вwp-admin/includes/class-pclzip.php
. Если у вас возникли проблемы,ZipArchive()
попробуйте класс PclZip.Теперь вам просто нужно склеить оба вместе. Может быть, я могу опубликовать пример кода позже, в настоящее время я не на моем столе.
Обновить
Ваш вопрос можно разделить на две части. Первый получает все изображения из галереи. Второй - архивирование изображений и отправка zip-файла.
Я объясню только первую часть, получая все изображения галереи, потому что архивирование файлов слегка оффтопично.
Возможно, есть и другие решения, но в этом примере я заменяю оригинальный шорткод галереи на собственный, чтобы получить изображения. Причина в том, что WordPress немного изменил галереи в версии 3.5.
До 3.5 изображения для галереи являются вложениями поста. После 3.5 изображения передаются в шорткод в качестве атрибута. Так как в WP3.5 мы больше не можем получать прикрепленные изображения сообщения, мы должны извлечь список из атрибутов шорткода. Моя стратегия состоит в том, чтобы заменить оригинальный шорткод собственным шорткодом, захватить атрибуты и вызвать исходный шорткод, чтобы получить вывод галереи.
Все связанные с галереей вещи находятся в классе. Чтобы создать zip-файл, мы можем использовать другой класс, который принимает в качестве входных данных вывод класса галереи. Давайте начнем с класса и простого конструктора.
Мы будем вызывать метод
get_instance()
позже в плагине с крючкомplugins_loaded
. В конструкторе мы удаляем исходный шорткод и заменяем его нашим собственным шорткодомgallery_zip_shortcode()
. Теперь нам нужен обратный вызов шорткодаПервым делом в этом методе является получение сообщения, потому что нам нужен идентификатор сообщения. Чем мы включаем
wp-includes/media.php
, этот файл содержит функцию обратного вызова для исходного шорткода галереи. Теперь мы вызываем метод, чтобы получить массив со всеми изображениями, создать вывод галереи, вызвав исходный обратный вызов галереи, создать ссылку и добавить ссылку к выводу галереи. Сами изображения, соответственно пути к изображениям, хранятся в переменной класса$images
, этот массив нам понадобится позже.Переменная класса
$image
содержит запись для каждого сообщения с галереей, поэтому мы можем использовать функцию либо на главной странице, либо в отдельном представлении. Каждая запись содержит массив для каждой галереи, поскольку в каждом сообщении может быть несколько галерей.Ядром плагина является метод получения изображений из шорткода.
Сначала мы решаем, будет ли это один пост или список идентификаторов постов. Если это список идентификаторов постов, мы обрабатываем галерею из WP3.5 +. После этого мы должны обработать
exclude
атрибут. После настройки всех переменных мы наконец можем получить изображения из галереи. Полученные изображения будут помещены в класс var$images
для последующего использования.Это золото плагина. Просто настройте массив с аргументами запроса, получите вложения
get_posts()
и просмотрите полученные вложения. Для обработки разных размеров, мы получаем прикрепленное изображение и полосу URL. Из прикрепленного файла мы берем путь и соединяем его с именем файла. В массиве$images
теперь находятся все изображения и их пути из галереи.На данный момент на ваш вопрос дан ответ. Но вы также хотите создать zip-файл из изображений. Вы можете создать zip-файл из массива
$images
в последнем методе. Но этот метод вызывается каждый раз, когда отображается галерея, и создание zip-файла может занять некоторое время. Возможно, никто не будет запрашивать созданный вами zip-файл, это пустая трата ресурсов.Как мы можем сделать это лучше? Вы помните, что я поместил все изображения в переменную класса
$images
? Мы можем использовать этот класс var для ajax-запроса. Но ajax-запрос - это просто очередная загрузка страницы, и мы можем получить доступ к изображениям только при создании вывода галереи. Мы должны сохранять наши изображения в месте, где мы можем получить к ним доступ даже после запроса другой страницы.В этом примере я использую переменную сеанса для хранения массива с изображениями. Переменная сеанса может быть доступна даже после перезагрузки другой страницы. Чтобы сохранить изображения, я регистрирую метод с
shutdown
крючком. После того, как WordPress закончит рендеринг страницы,shutdown
будет вызван хук. На данный момент мы должны были собрать все изображения из всех отображаемых галерей. Мы просто храним изображения и можем получить к ним доступ в запросе ajax.Когда запускается ajax-запрос, мы вызываем сессию var и создаем zip-файл из данных. Но это немного не по теме для этого вопроса.
Я создал репозиторий на GitHub с полным кодом плагина. Я надеюсь, что это указывает вам в правильном направлении.
источник
Мне нравится идея, что плагин Ральфа может загружать целую галерею за один раз, но я не смог заставить его работать. Я нашел обходной путь, который работает для наших целей. Метод состоит в том, чтобы заменить собственную галерею WP своей собственной, которую вы помещаете в конец
functions.php
файла вашей темы, и добавляете следующий файл с именемdownload.php
в папку активной темы. В пользовательской галерее ссылка под файлом вызывает файл download.php, который автоматически принудительно загружает ваш файл на жесткий диск. Я проверил это на последних версиях Chrome, Firefox и Safari, и он отлично работает. Использовал тему Двадцать двенадцать, но нет причин, по которым она не должна работать и над другими.а) Добавить следующее в конце
functions.php
. Это просто взято из media.phpб) Скопируйте и вставьте следующее в файл, называемый
download.php
в базовом каталоге темы.с). Не забудьте указать ссылку на файл в галерее! Важный!
источник
download.php
и$_GET
параметр, я могу загружать все файлы, которые я хочу, из вашей веб-папки (также в сетевых папках), какwp-config.php