Разработка сайта «ArbatHomes»
Предыстория
Описание этапов работы
Проанализировав старый сайт, выяснилось, что сайт очень сильно запущен в плане обновлений. На момент анализа сайта, версии указанных движков невозможно было напрямую обновить WP 4.9.16 и WC 2.6.14 – при обновлении вордпрес, во время установки сайт падал и сыпались всевозможные ошибки. Обновление вукомерц – кнопка обновления была недоступна.
Еще один из самых сложных моментов – плагин многоязычности – qTranslate-X – поддержка плагина прекращена более 4 лет назад и выяснилось, что все проблемы с обновлениями связаны с этим плагином.
Было принято решение миграции мультиязычности на полиленг. Прямой миграции нет, поэтому план был такой: отключение qTranslate-X, постепенное обновление всех необходимых плагинов (включая вукомерц) и собственно самого движка вордпрес + в дальнейшем создание копий записей для второго языка и привязка этих записей к переводу (этот этап необходимо делать вручную).
Была сделана копия сайта, развернута локально и при помощи wp cli произведено поэтапное обновление вукомерц – версия за версией, пока вукомерц не обновился до самой последней версии. Точно таким же методом были обновлены все остальные плагины и вордпрес.
Таким образом, я привел все таблицы базы к современным версиям плагинов и вордпреса.
Следующим этапом, необходимо было развернуть чистую версию нового сайта (для того, чтобы и в базе в самом движке не было мусора в виде лишних файлов и записей в БД), установить необходимые плагины и сделать перенос всех данных со старого обновленного сайта на новый чистый. В качестве плагина экспорта/импорта данных был выбран WP All Import + WP All Export.
Процесс экспорта и импорта происходил в несколько этапов:
- сначала необходимо было экспортировать все записи новостей и статей. Здесь тоже не обошлось без трудностей – предыдущий разработчик перепутал функционал вордпреса и все записи для статей и новостей сделал через функционал страниц, а страницы сделал через функционал записей. Поэтому, сначала необходимо было конвертировать все страницы в записи с разделением на рубрики – статьи и новости. При помощи плагина Post Type Switcher страницы превратились в записи и были размещены по своим рубрикам. Страниц было не много и их нужно было создавать заново исходя из нового дизайна, поэтому их не конвертировал и удалил на локальной копии. При помощи плагина экспорта/импорта был произведен перенос всех записей на новый сайт.
- следующим этапом был перенос всех объектов недвижимости (в вукомерц – товаров) на новый сайт. При помощи плагина экспорта/импорта, точно так же, как и записи, все товары были перенесены на новый сайт.
- самая сложная задача – это перенос медиа контента – всех фотографий сайта на новый движок. В wordpress нельзя просто взять и скопировать все папки с фотографиями, чтобы они появились в медиафайлах. Эти файлы нужно зарегистрировать в базе. Но, во время переноса статей и товаров я не учел этот момент, поэтому все медиафайлы при импорте получили новые идентификаторы в базе и были размещены по новым адресам, которые отличались от адресов фотографий у статей и товаров. Поэтому, после переноса всех медиафайлов, был заново запущен процесс импорта статей и товаров по отдельности, только с обновлением данных о медиафайлах. Плагин экспорта и импорта успешно справился со своей задачей и везде были обновлены данные на новые.
После полного переноса данных, началась разработка новой версии сайта с новым функционалом.
Для расширения возможностей админки сайта и вывода различного контента, был выбран плагин кастомных полей ACF Pro – расширенная версия.
В качестве фильтра товаров (объектов недвижимости) был выбран плагин WOOF. Этот фильтр обладает всеми необходимыми функциями для поставленной задачи, но у него есть один недостаток – он не поддерживает связку с мультиязычностью через плагин Polylang, поэтому для перевода на английский названия полей и кнопки фильтра, был написан небольшой скрипт, который при загрузке сайта на английском языке, подменяет русские названия полей на английские (сами значения полей берутся из базы и имеют переводы).
В процессе разработки функционала, выяснилось, что часть старого функционала необходимо переделать. А именно, убрать атрибут object_id и вместо него сделать артикул (номер объекта), и чтобы этот артикул подставлялся автоматически в слаг товара при создании нового объекта недвижимости. Практически все товары уже содержали заполненное поле артикула товара, поэтому я вручную назначил у остальных, где его не было и был заполнен атрибут object_id. Далее, для автоматизации процесса подстановки артикула в слаг товара был использован плагин Permalink Manager.
Все ссылки были перегенерированы на новые и в настройках отмечено как необходимо в дальнейшем генерировать ссылку на товар.
Далее поступил запрос от заказчика, что для одного города и его районов необходимо показывать цены в другой валюте. Сложность заключалась в том, что цена, которая хранится в базе у этих объектов – уже в другой валюте. Т.е., нужно подменять именно сам знак валюты и только в указанном регионе.
Была написана небольшая функция для подмены символа:
add_filter( 'woocommerce_currency_symbol', 'change_currency_symbol', 10, 2 );
function change_currency_symbol( $symbols, $currency ) {
if( has_term( 'mersin', 'product_cat' ) ) {
return 'TL';
} else {
return '€';
}
return $symbols;
}
При дальнейшей разработке поступил еще запрос, чтобы в общем потоке не показывать уже проданные объекты. Т.е., сами объекты должны работать, но не должны выводиться при серфинге по каталогу или при поиске через фильтр объектов.
Для этого необходимо было внедриться в функцию вывода данных вукомерц и добавить в нее свои аргументы, которые исключают вывод определенных записей. Отметка о том, что объект продан, делалась через атрибут, поэтому в качестве аргумента была добавлена такая часть кода:
$args['tax_query'][] = [
'taxonomy' => 'pa_special_offers',
'field' => 'slug',
'terms' => 'sold',
'operator' => 'NOT IN'
];