Доработка сайта мебельного производства «De Core» (mebel-na-zakaz-krd.ru)
Мебельное производство (Краснодар) · Производство и продажа мебели на заказ (каталог/лиды)
Сайт мебельного производства: 12 правок заказчика плюс приведение к закону о персональных данных — всё на живом сайте, с приёмкой после каждого этапа.
- PHP
- WordPress
- классическая PHP-тема (custom)
- ACF (ACF Pro)
- JavaScript
- jQuery
- CSS/SCSS
- HTML
- MySQL
- WP-CLI
- REST API
- адаптивная вёрстка
В цифрах
- 12 / 12
- пунктов ТЗ выполнено и задеплоено на боевой сайт
- 18
- файлов темы изменено
- 2
- новые юридические страницы (Политика обработки ПДн, Согласие на обработку ПДн) — обе live, HTTP 200
- 7
- категорий мебели добавлено в выпадающее меню «Каталог»
- 57
- фото в блоке INSTAGRAM — свёрнуто до 2 рядов + кнопка «Раскрыть все фото»
Ключевое
- Написал и опубликовал политику обработки и согласие, снял заранее проставленные галочки в формах и добавил проверку согласия на сервере.
- Разобрался с плавающим дефектом: иконки на главной пропадали, потому что плагин оптимизации подменял адрес картинки при отложенной загрузке.
- Ленту из 57 фотографий свернул до двух рядов с кнопкой раскрытия — страница перестала быть бесконечной.
- Собрал выпадающее меню каталога из семи категорий, убрал чужую ссылку из подвала и оживил ссылки, ведшие в никуда.
- Перед каждой правкой — резервная копия на сервере; попутно нашёл в формах уязвимость, которой в задании не было.
Задача
Мебельное производство в Краснодаре: сайт работает и принимает заказы. Заказчик прислал список из 12 правок — в подвале висела ссылка на прежнего разработчика, часть ссылок вела в никуда, иконки на главной периодически пропадали, сетки фотографий разъезжались.
Отдельным блоком шли требования закона о персональных данных: на сайте не было ни политики обработки, ни согласия, а галочки в формах стояли заранее проставленными. Работать предстояло на живом сайте, с приёмкой заказчиком после каждого этапа.
Что сделано
- Начал с разбора: прочитал код темы, привязал каждый пункт задания к конкретным файлам и попутно нашёл в формах уязвимость, которой в задании не было.
- Привёл сайт к требованиям закона о персональных данных: написал и опубликовал политику обработки и согласие, снял заранее проставленные галочки в формах и добавил проверку согласия на сервере, а не только в браузере, поставил уведомление о файлах cookie в палитре сайта.
- Починил то, что мешало продажам: убрал чужую ссылку из подвала, оживил неработающие ссылки, собрал выпадающее меню каталога из семи категорий мебели, заменил текстовые ссылки на соцсети иконками.
- Разобрался с пропадающими иконками. Дефект был плавающим, и причина оказалась неочевидной: плагин оптимизации подменял адрес картинки при отложенной загрузке. Такие вещи нельзя «подогнать» — можно только найти.
- Выровнял сетки в каталоге и портфолио, а ленту из 57 фотографий свернул до двух рядов с кнопкой «Раскрыть все» — страница перестала быть бесконечной.
Итог
Все 12 пунктов задания выполнены и работают на живом сайте. Обе юридические страницы опубликованы и открываются, галочки согласия в формах больше не проставлены заранее, согласие проверяется на сервере — с точки зрения закона о персональных данных сайт стал чистым.
Меню каталога собрано из семи категорий, лента из 57 фотографий свёрнута до двух рядов с кнопкой раскрытия, сетки изображений выровнены, а иконки на главной перестали пропадать. Каждая правка уезжала на сайт с резервной копией, сделанной перед ней.
Технические детали
Решение и подход
Деплой шёл через удалённый root-equivalent доступ к WordPress. Из-за ограничения на прямую запись *.php (разрешена только в выделенной sandbox-директории) правки PHP-файлов темы выполнялись через file_put_contents с предварительной проверкой substr_count(old) === 1 (защита от случайной множественной замены) и серверным бэкапом перед каждой правкой; CSS/JS/SVG — прямой записью файлов; страницы/меню — через WP-CLI/wp_insert_post. Каждый этап завершался верификацией на бою (wp_remote_get/curl + сверка md5). Сознательно отказался от child-темы (классическая тема — риск регрессий) и от локального WP-стека (тесты — прямо на бою с откатом из бэкапа). Предусмотрен FTP-fallback на случай отказа основного канала.
Стек и обоснование
WordPress + PHP (кастомная классическая тема decore); ACF Pro (контент шапки, слайдеры, репитеры портфолио, новый repeater соцсетей); jQuery/JS и CSS Grid/flexbox (сетки, дропдаун, кнопка раскрытия фото); MySQL; WP-CLI и REST API для административных операций и деплоя; SVG-иконки соцсетей. Выбор инструментов продиктован существующим стеком сайта — задача доработки требовала вписаться в текущую архитектуру темы без её переписывания.
Инженерные вызовы
- Lazy-load подменял иконки: WP Smush заменял
srcна 1×1 placeholder, перенося URL вdata-src→ прерывистое отображение. Решение —class="no-lazyload"+ условная обёртка пустых ACF-полей. - Дропдаун никогда не рендерился:
strip_tags(wp_nav_menu(.))вырезал классы и<ul class="sub-menu">. Решение — убратьstrip_tags,depth => 2; CSS дропдауна уже был в теме. - ACF не сохранял поля: ACF Pro 5.7.7 не рендерит
_acfnonceв Gutenberg на WP 7.0 → save пропускался. Решение — отключить блочный редактор для ACF-страниц (use_block_editor_for_post), вернув Classic Editor. - Баг таксономии портфолио: лишние пробелы в
termsslug приводили к пустотам в сетке — устранены. - Правка PHP при sandbox-ограничении: запись
*.phpтемы только черезfile_put_contentsс проверкой уникальности фрагмента и серверным бэкапом. - Работа на проде без staging: обязательный бэкап до каждой правки + постфактум-верификация (md5/HTTP) как страховка от регрессий.
Услуги в проекте
- аудит
- доработка существующего
- разработка
- деплой
- SEO
- 152-ФЗ/ПДн
- контент