Понятно, что создателям шаблонов проще стандартными функциями и тегами шаблонов WordPress вывести стандартные виды всех страниц сайта, но это создает единообразие внешнего вида и ощущение перехода на одни и те же страницы сайта .
Сразу покажу, что получим в результате.
Вид архивов wordpress: архив рубрик до измения
Архив рубрик с убранными миниатюрами и ссылкой подробнее.
Важно! Так как данная задача решается изменением кода шаблона, то перед работами делаем (базу данных+файлы сайта). В дополнении, делаем две копии рабочего шаблона, одну для правки, вторую для восстановления неправильной правки.
Меняем внешний вид архивов WordPress
Чтобы изменить внешний вид архивов WordPress, нужно найти, вернее, определить, какой файл в вашем рабочем шаблоне выводит архивы. В большинстве шаблонов все архивы выводятся единым файлом, называется он (archive.php).
Повторяюсь, для безопасности потерять сайт, не используем редактор в административной панели сайта, а правим заранее сделанные резервные копии файлов шаблона.
В текстовом редакторе (типа Notepad++), открываем файл archive.php и начинаем правку. В файле archive.php (в конце файла) ищем функцию, выводящую блог архива:
Имя это имя файла, который используется для вывода блога архивов.
Первая идея выполнения задачи проста : нам нужно поменять код файла выводящего архивы (content.php), а именно, убрать в нем несколько функций, и тем самым сменить внешний вид всех архивов сайта (рубрик, авторов, дат и т.д.).
Но возникает вопрос, если мы поменяем код файла шаблона, он вернется в прежнее состояние после первого обновления шаблона, нам это не нужно. Поэтому, мы не будем редактировать файл content.php, а копируем его и создаем свой файл, под другим названием, например content-cat.php и редактируем его .
Ищем в файле функцию, выводящую миниатюры. Функция вывода миниатюр будет вверху. Убираем вывод миниатюры.
или и убираем строку с ‘Read More’, ‘название шаблона’.
Созданный и отредактированный файл content-cat.php сохраняем и заливаем в каталог сайта в папку рабочего шаблона. Этот файл появится в административной панели сайта на вкладке Внешний вид→Редактор.
Переходим ко второму шагу. В файле, который выводит архивы (archive.php), меняем название файла content на content-cat .
Сохраняемся и смотрим результат. Если, что те не так, система покажет ошибку, файл ошибки и строку ошибки. Для исправления ошибки, сохраненные резервные файлы шаблона возвращаем на место и повторяем все заново.
Совет. Если хотите почитать больше, о тегах шаблонов и стандартных функциях WordPress, обратите внимание на этот сайт: https://wp-kama.ru . Это не реклама и даже не ссылка, этот сайт понятнее, чем официальный сайт WordPress, в разделе тегов шаблонов и функций.
В развитие темы
По-моему, тема анонсов на сайтах WordPress требует продолжения. В ближайших постах, проговорю темы: и .
WordPress Codex
Скрытый текст
Функция the_post_thumbnail
Функция
the_post_thumbnail
Назначение
Функция the_post_thumbnail выводит html код картинки-миниатюры поста пустое значение, если картинка отсутствует.
Применение
Этот тег шаблона, функция the_post_thumbnail, должен использоваться внутри
Использование
the_post_thumbnail(string|array $size = "post-thumbnail", string|array $attr = "")Источник
Файл: wp-includes / post-thumbnail-template.php
Function the_post_thumbnail($size = "post-thumbnail", $attr = "") { echo get_the_post_thumbnail(null, $size, $attr); }
Параметры
$size (строка/массив)
Размер миниатюры, которую нужно получить. Может быть строкой с условными размерами: thumbnail, medium, large, full или массив из двух элементов (ширина и высота картинки): array(60, 60).
По умолчанию : ‘post-thumbnail’, то есть размер который устанавливается для текущей темы функцией set_post_thumbnail_size()
$attr (строка/массив)
Массив атрибутов, которые нужно добавить получаемому html тегу img (alt - альтернативное название).
По умолчанию :
Пример
" title= "_("permalink"), the_title_attribute("echo=0")); ?>"> get("layout", "imgwidth"), $SMTheme->get("layout", "imgheight")), array("class" => $SMTheme->get("layout","imgpos") . " featured_image")); if (!is_single()){ ?>Вчера на форуме у меня спросили про создание ZIP-архивов на PHP . Я немного подумал и понял, что это тема будет интересна большому числу людей, ведь ZIP-архивирование на PHP весьма популярная тема. И в этой статье я покажу пример, как создаётся ZIP-архив через PHP-скрипт .
Давайте я сразу приведу пример создания ZIP-архива , а потом его тщательно прокомментирую:
$zip = new ZipArchive(); //Создаём объект для работы с ZIP-архивами
$zip->open("archive.zip", ZIPARCHIVE::CREATE); //Открываем (создаём) архив archive.zip
$zip->addFile("index.php"); //Добавляем в архив файл index.php
$zip->addFile("styles/style.css"); //Добавляем в архив файл styles/style.css
$zip->close(); //Завершаем работу с архивом
?>
В результате выполнения данного скрипта появится ZIP-архив , у которого в корне будет лежать файл index.php , а также будет создана директория styles , в которой будет находиться файл style.css . Я думаю, что это всё очевидно и логично. А теперь комментирую, что мы с Вами делали:
- Создали объект ZipArchive с помощью конструктора.
- Создали архив с помощью метода open() объекта ZipArchive . Мы передали название архива (archive.zip ) и константу ZIPARCHIVE::CREATE , которая сообщает, если архива не существует, то его надо создать.
- Метод addFile() добавляет в архив файлы. Сначала мы добавили файл "index.php ", который находится в одной директории со скриптом. Далее мы добавили файл style.css , так же указав к нему правильный путь относительно скрипта.
- Метод close() завершает работу с архивом. Всегда его выполняйте, чтобы освободить ресурсы компьютера, а также избежать самых различных проблем, связанных с работой этого скрипта и других скриптов, которым необходим доступ к этому архиву.
Вот таким простым способом Вы можете создавать в автоматическом режиме ZIP-архивы с помощью PHP . В следующей статье мы с Вами разберём, как извлекать ZIP-архив через PHP .
Здравствуйте, уважаемые читатели блога сайт. Не так давно я писал про то, которая безусловно заслуживает всяких лестных эпитетов, несмотря на присущие ей небольшие недостатки и критику ее статей со стороны научного сообщества.
Сам факт того, что некоммерческий проект уже не одно десятилетие трудится на благо всего интернет сообщества, заслуживает огромного уважения. Но в сети есть еще подобный масштабный проект, который не получая с этого дохода выполняет очень важную роль — сохраняет архивы сайтов , видео, аудио и печатной продукции.
Что примечательно, в последней колонке этого списка (его можно открыть в Excel) будет отображаться количество архивов, созданных для каждого сайта в Web Archive (правда, проверить наличие домена в веб-архиве можно и в ряде онлайн сервисов, например, на этом или на этом).
Список буржуйских доменных имен, освобождающихся или уже освободившихся, предлагается скачать по этой ссылке . Ну, а дальше просматриваем содержимое сайтов, которое сохранил Web Archive и пытаемся найти что-то стоящее. Потом проверяем уникальность этих материалов (ссылку приводил чуть выше) и в случае удачи публикуем их на своем ресурсе, либо продаем в какой-нибудь .
Да, способ муторный и мною лично не проверенный. Но, думаю, что при некоторой степени автоматизации и обмозговывания он может давать неплохой выхлоп. Наверное, кто-нибудь уже это поставил на поток. А вы как думаете?
Удачи вам! До скорых встреч на страницах блога сайт
Вам может быть интересно
Сравнение сайтов в SEObuilding.RU для бесплатного анализа потенциальных доноров при покупке ссылок
Бесплатный онлайн сервис по подбору красивых и свободных для регистрации доменов (Frishki.ru)
SEObuilding.RU - комплектный бесплатный анализ сайтов с расчетом их траста, стоимости и многого другого
Фотостоки и фотобанки - 30 бесплатных легальных источников фотографий, изображений и иконок
VirusTotal - онлайн проверка на вирусы файлов вашего компьютера, телефона и сайтов всеми антивирусами одновременно
Анализ сайта в бесплатных онлайн сервисах Pr-cy, Cy-pr, Be1, Xseo и других
Проверка (анализ) сайта - 85 онлайн сервисов и программ
Как я увеличил посещаемость на сайте до 300 человек в день?
SE Ranking - лучший сервис мониторинга позиций для новичков и профессионалов в SEO
Ускорение и защита вашего сайта в облачном сервисе Айри.рф
Если я спрошу вас, какой стандартный тип страниц в WordPress используете реже всего, то, скорее всего, ваш ответ будет – шаблон архивов. Или, что еще вероятнее, вы вообще даже не слышали о шаблоне архивов – настолько он непопулярен. Причина проста. Стандартный способ использования архивов далек от понимания «дружественного к пользователям».
Давайте поправим это сегодня! Давайте создадим страницу архивов WordPress, которая будет действительно полезной. Самая приятная вещь – то, что вы сможете использовать эти архивы в любой современной теме WordPress, установленной на вашем сайте. Однако давайте сначала разберемся, что мы подразумеваем под «страницей архивов»?
История архивов WordPress
В WordPress вы работаете с массой разных шаблонов и структурных элементов, которые входят в стандартную конфигурацию. Если взглянуть на список директорий стандартной темы Twenty Fifteen, то мы увидим следующее:
- Страница ошибок 404
- Страница архивов (наш сегодняшний гость)
- Страница вложенных изображений
- Индексная страница (главная страница)
- Шаблон страниц (для стандартных страниц)
- Страница результатов поиска
- Страницы отдельных записей и вложений
Несмотря на различные цели, все эти страницы очень похожи по своей структуре, и зачастую они отличаются лишь несколькими участками или несколькими строками кода. Единственное видимое различие между индексной страницей и архивной страницей – это дополнительный заголовок вверху, который меняется в зависимости от просматриваемой страницы.
Идея, которая была положена в основу архивной структуры, заключается в том, чтобы предложить администратору блога удобный и простой способ вывода архивов по различным критериям. В конце концов, все эти различные архивные страницы – это просто версии индексной страницы; они выводят контент, опубликованный в определенный временной промежуток, определенным автором, с определенными метками и рубриками.
Звучит хорошо, если смотреть на это с позиций программиста, однако это не самый удобный подход с точки зрения пользователей. В данном случае отсутствует один важный уровень – уровень, который пролегает между намерением пользователя найти контент и отдельными элементами архивов.
Вот, что я имею в виду. В данный момент единственный встроенный способ вывода архивных ссылок на сайте WordPress – это вывод через виджет. Таким образом, если вы хотите разрешить пользователям углубляться в архивы, причем вы хотите сделать это понятным для людей способом, вам пришлось бы посвятить весь сайдбар под одни архивы (лишь для того, чтобы раскрыть разные виды структурирования: архивы по дате, архивы рубрик, архивы меток, авторские архивы и т.д.).
Нам нужен какой-то посредник, какая-то страница, которая будет приветствовать посетителя, объяснять ему, что он находится в архиве, и указывать на тот контент, которым он интересуется, либо предлагать популярный контент.
Именно по этой причине мы и решили создать произвольную страницу архивов.
Как создать произвольную страницу архивов в WordPress
Вот то, что мы собираемся сделать. Наша произвольная архивная страница будет основана на специальном шаблоне страниц. Этот шаблон позволит нам сделать следующее:
- Добавить произвольное сообщение (может содержать текст, изображения, форму регистрации и т.д. – стандартный контент WordPress).
- Выводить 15 последних записей (настраивается)
- Отображать ссылки на авторские архивы
- Отображать ссылки на архивы по месяцам
- Иметь дополнительные области виджетов (чтобы выводить такие вещи, как популярный контент, рубрики, теги).
Наконец, страница будет адаптивной, и ее можно будет использовать на любом сайте.
Однако нам действительно понадобится взять за основу некоторую тему. Я воспользовался темой Zerif Lite . Признаюсь, что это одна из наших собственных тем. Тем не менее, это одна из 10 самых популярных тем, опубликованных в прошлом году в каталоге тем WordPress. Поэтому я надеюсь, что вы воспользуетесь ей.
И да, если вам не нравится тема, не нужно ругаться. Вы можете использовать подход, представленный в статье, с любой другой темой.
Начинаем с основного файла
Самая лучшая модель для создания архивной страницы — это файл page.php вашей текущей темы, на что есть некоторые причины:
- Его структура уже оптимизирована для вывода произвольного контента в пределах основного контентного блока
- Это, пожалуй, один из самых простых шаблонов страниц в структуре вашей темы
Поэтому воспользуемся файлом page.php темы Zerif Lite. Я создам его копию и назову ее tmpl_archives.php.
(Убедитесь в том, что вы не назвали страницу page-archives.php. Все названия файлов, начинающиеся с «page-», будут рассматриваться как новый шаблоны страниц в пределах основной иерархии файлов WordPress тем. Именно по этой причине мы использовали префикс tmpl_).
Изменим ее на следующее:
Все, что делает эта строка – это передает соответствующий контентный файл для нашей страницы архивов.
Вы можете удалить и другие элементы, которые выглядят лишними, с вашей архивной страницы (как комментарии, к примеру), однако убедитесь в том, что вы удалили все элементы, которые относятся к HTML-структуре. И, в целом, не бойтесь экспериментировать. В конце концов, если что-то вдруг перестанет работать, вы всегда можете вернуться к предыдущему коду и легко провести его отладку.
Кроме того, не забывайте о стандартном комментарии — описании шаблона, — который должен находиться в самом начале вашего файла (в нашем случае, в файле tmpl_archives.php):
В конце концов, мы останемся со следующей структурой (некоторые элементы удалены из нее для удобства):
В этом файле нам нужно будет удалить все лишнее, оставив только структурные элементы, а также вызовы базовых WordPress-функций:
Комментарий-заполнитель в самой середине кода – то, куда мы затем вставим наши произвольные элементы.
Добавляем произвольное приветствие
Об этом уже позаботился сам WordPress. Нам достаточно вставить следующую строку:
Добавляем новые области виджетов
Давайте настроим новые области виджетов в WordPress, используя стандартный процесс. Мы сделаем это с помощью дополнительного файла функций, чтобы сохранить вещи реюзабельными от темы к теме. Мы создадим новый файл, archives-page-functions.php, поместив его в основной каталог темы, а также зарегистрируем две новые области виджетов:
If(!function_exists("archives_page_widgets_init")) : function archives_page_widgets_init() { /* First archive page widget, displayed to the LEFT. */ register_sidebar(array("name" => __("Archives page widget LEFT", "zerif-lite"), "description" => __("This widget will be shown on the left side of your archive page.", "zerif-lite"), "id" => "archives-left", "before_widget" => "
", "before_title" => "", "after_title" => "
",)); /* Second archive page widget, displayed to the RIGHT. */ register_sidebar(array("name" => __("Archives page widget RIGHT", "zerif-lite"), "description" => __("This widget will be shown on the right side of your archive page.", "zerif-lite"), "id" => "archives-right", "before_widget" => " ", "before_title" => "", "after_title" => "
",)); } endif; add_action("widgets_init", "archives_page_widgets_init");If(!function_exists("archives_page_styles")) : function archives_page_styles() { if(is_page_template("tmpl_archives.php")) { wp_enqueue_style("archives-page-style", get_template_directory_uri() . "/archives-page-style.css"); // standard way of adding style sheets in WP. } } endif; add_action("wp_enqueue_scripts", "archives_page_styles");
Это условная операция постановки в очередь. Она будет работать только в том случае, если посетитель просматривает архивную страницу.
Нужно не забыть включить наш новый файл archives-page-functions.php путем добавления следующей строки в самый конец файла functions.php текущей темы:
Require get_template_directory() . "/archives-page-functions.php";
Наконец, новый блок, который мы будем использовать в нашем основном файле content-tmpl_archives.php, достаточно простой. Поместите следующий код под вызовом the_content();:
Все, что нам теперь останется – это позаботиться о единственно недостающем файле, archives-page-style.css. Однако давайте оставим его на потом, поскольку мы будем использовать его в качестве хранилища всех стилей нашей произвольной архивной страницы, в том числе и для виджетов.
Вывод последних 15 записей
Для этого нам нужно провести некоторое ручное кодирование PHP. Даже учитывая то, что вывод записей можно реализовать с помощью разнообразных виджетов, давайте избежим однообразия и погрузимся в написание кода, чтобы продемонстрировать больше разных возможностей.
Вы, вероятно, спросите, почему именно 15 записей? Не знаю, просто взял это число с потолка. Давайте сделаем его настраиваемым с помощью произвольных полей.
Вот, что мы сделаем:
- Задаем количество записей через произвольное поле archived-posts-no.
- Если число не является корректным, шаблон будет использоваться стандартное значение в 15 последних записей.
Ниже представлен код, который делает это. Поместите его под предыдущей секцией в файле content-tmpl_archives.php, который обрабатывает новые области виджетов.
ID, "archived-posts-no", true)); /* Here, we"re making sure that the number fetched is reasonable. In case it"s higher than 200 or lower than 2, we"re just resetting it to the default value of 15. */ if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15; $my_query = new WP_Query("post_type=post&nopaging=1"); if($my_query->have_posts()) { echo "
"; echo "
- ";
$counter = 1;
while($my_query->have_posts() && $counter <= $how_many_last_posts) {
$my_query->the_post();
?>
- ">
Все, что делает этот код – это получает значение произвольного поля, задает количество выводимых записей, после чего выбирает эти записи из базы данных, используя WP_Query();. Также я использую некоторые иконки Font Awesome, чтобы добавить данному блоку некоторый шарм.
Вывод ссылок на авторские архивы
Этот раздел полезен только в том случае, если вы работаете с блогом с многочисленными авторами. Пропустите его, если у вас один автор.
Эта функциональность может быть реализована при помощи простого блока кода, который нужно поместить в наш файл content-tmpl_archives.php (под предыдущим блоком):
Our Authors
Мы перейдем к стилям через пару минут. В данный момент обратите внимание на что, что все делается с помощью вызова функции wp_list_authors().
Вывод ссылок на архивы по месяцам
Я добавил этот элемент в самый конец, поскольку это не самый полезный компонент с точки зрения читателей. Однако его важно иметь на архивной странице, чтобы вам не пришлось использовать виджеты для вывода архивов по месяцам в других местах сайта.
Вот, как это будет выглядеть в файле content-tmpl_archives.php:
By Month
В данном случае мы выведем это в виде отдельного абзаца с записями, разделенными прямым слэшем (|).
Полный шаблон архивной страницы
Давайте взглянем на полный файл content-tmpl_archives.php, который является нашим основным файлом для вывода произвольного архива:
Last ".$how_many_last_posts." Posts
";
echo "";
$counter = 1;
while($my_query->have_posts() && $counter <= $how_many_last_posts) {
$my_query->the_post();
?>
Our Authors
By Month
Таблица стилей
Наконец, давайте посмотрим на таблицу стилей. Вот как выглядит файл archives-page-style.css:
Archives-widget-left { float: left; width: 50%; } .archives-widget-right { float: left; padding-left: 4%; width: 46%; } .archives-latest-section { } .archives-latest-section ol { font-style: italic; font-size: 20px; padding: 10px 0; } .archives-latest-section ol li { padding-left: 8px; } .archives-authors-section { } .archives-authors-section ul { list-style: none; text-align: center; border-top: 1px dotted #888; border-bottom: 1px dotted #888; padding: 10px 0; font-size: 20px; margin: 0 0 20px 0; } .archives-authors-section ul li { display: inline; padding: 0 10px; } .archives-authors-section ul li a { text-decoration:none; } .archives-by-month-section { ext-align: center; word-spacing: 5px; } .archives-by-month-section p { border-top: 1px dotted #888; border-bottom: 1px dotted #888; padding: 15px 0; } .archives-by-month-section p a { text-decoration:none; } @media only screen and (max-width: 600px) { .archives-widget-left { width: 100%; } .archives-widget-right { width: 100%; } }
В основном стили касаются шрифтов и нескольких структурных элементов, за исключением пары выравниваний, а также блока адаптивного дизайна в конце.
Давайте посмотрим, как это будет выглядеть на практике. Вот сайт, который имеет массу контента в архиве:
Как интегрировать этот шаблон в любую тему
Произвольная страница архивов, которую мы создали здесь, представлена для темы Zerif Lite, которая имеется в официальном каталоге WordPress. Однако, как я уже говорил, она может использоваться вместе с любой темой. Вот как это сделать:
- Берем файлы archives-page-style.css и archives-page-functions.php, которые мы создали в руководстве, после чего помещаем их в главный каталог темы.
- Редактируем functions.php темы и добавляем следующую строку в самый конец: require get_template_directory() . ‘/archives-page-functions.php’;
- Берем файл page.php темы, делаем его копию, переименовываем ее, меняем вызов функции get_template_part() на get_template_part(‘content’, ‘tmpl_archives’);, после чего добавляем описательный комментарий в самое начало: /* Template Name: Archive Page Custom */.
- Берем файл content-page.php вашей темы, делаем его копию, переименовываем его в content-tmpl_archives.php, и добавляем в него все произвольные блоки, которые мы создали в руководстве, сразу под вызовом функции the_content();.
- Тестируем и наслаждаемся.
Вот как это будет выглядеть в стандартной теме Twenty Fifteen:
Когда нужно быстро выкачать исходники сайта с сервера, даже относительно быстрый SSH тонель не дает нужной скорости. И ждать приходиться очень и очень долго. А еще многие хостинг провайдеры не предоставляют этого доступа, а заставляют довольствоваться FTP, который в разы медленнее.
Лично для себя я определил выход. На сервер закачивается небольшой скрипт и запускается. Через некоторое время получаем архив со всеми исходниками. А один файл, даже по древнему FTP качается гораздо быстрее нежели сотня маленьких.
Ранее на страницах этого блога библиотека zipArchive . Однако, тогда речь шла о распаковке архива.
Для начала, нам потребуется узнать, есть ли на сервере поддержка zipArchive. Это популярная библиотека установлена на подавляющем числе хостингов.
Библиотека жестко ограничена параметрами php и сервера. Огромные базы и банки фотографий заархивировать не получится. Даже базы старой доброй программы 1С для бухгалтерии . Казалось бы в них должны быть лишь текстовые данные. Но нет.
Советую использовать библиотеку, лишь при архивировании относительно небольших сайтов, с огромным числом мелких файлов.
Проверим доступна ли работа с библиотекой
If (!extension_loaded("zip")) { return false; }
Если все хорошо, скрипт продолжит свое выполнение дальше.
Небольшой оффтоп, для таких проверок. Проверки стоит делать именно так, избегая больших конструкций с вложенными скобками. Так код будет более атомарным, и легко будет поддаваться отладке. Сравните
If(a==b){ if(c==d){ if(e==f){ echo "Все условия сработали"; }else echo "e<>f"; }else echo "c<>d"; }else echo "a<>b;
и такой код
If(a!=b) exit("a<>b); if(c!=d) exit("c<>d); if(e!=f) exit("e<>f); echo "Все условия сработали";
Код приятнее и не разрастается на огромные вложенные конструкции.
Простите за оффтоп, но хотелось поделится этой находкой.
Теперь создадим объект и архив.
$zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; }
где $destination - это полный путь до архива. Если архив уже создан, то файлы будут в него дозаписываться.
$zip->addEmptyDir(str_replace($source . "/", "", $file . "/"));
где $source это полный путь до нашей категории (которую мы изначально архивировали), $file - это полный путь до текущей папки. Это сделано для того, чтобы в архиве не было полных путей, а лишь относительные.
Добавление файла работает похожим образом, но нужно сперва прочитать его в строку.
$zip->addFromString(str_replace($source . "/", "", $file), file_get_contents($file));
В конце надо закрыть архив.
Return $zip->close();
Как пробежать все файлы и поддиректории в папке, думаю объяснять не надо. Погуглите, что-то вроде Рекурсивный обход папок на php
Мне подошел такой вариант
Function Zip($source, $destination){ if (!extension_loaded("zip") || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace("\\", "/", realpath($source)); if (is_dir($source) === true){ $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file){ $file = str_replace("\\", "/", $file); // Ignore "." and ".." folders if(in_array(substr($file, strrpos($file, "/")+1), array(".", ".."))) continue; $file = realpath($file); $file = str_replace("\\", "/", $file); if (is_dir($file) === true){ $zip->addEmptyDir(str_replace($source . "/", "", $file . "/")); }else if (is_file($file) === true){ $zip->addFromString(str_replace($source . "/", "", $file), file_get_contents($file)); } } }else if (is_file($source) === true){ $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); }