Перейти к содержимому
Эльдар Шахвалиев
Обсудить проект
← Все проекты
202605.2026 — 05.2026В продедоработка существующего

Доработка сайта мебельного производства «De Core» (mebel-na-zakaz-krd.ru)

Мебельное производство (Краснодар) · Производство и продажа мебели на заказ (каталог/лиды)

Fullstack-инженер (WordPress/PHP) — единоличный исполнитель: аудит, доработка кастомной темы, деплой на бой, клиентская отчётность

Сайт мебельного производства: 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.
  • Баг таксономии портфолио: лишние пробелы в terms slug приводили к пустотам в сетке — устранены.
  • Правка PHP при sandbox-ограничении: запись *.php темы только через file_put_contents с проверкой уникальности фрагмента и серверным бэкапом.
  • Работа на проде без staging: обязательный бэкап до каждой правки + постфактум-верификация (md5/HTTP) как страховка от регрессий.
  • аудит
  • доработка существующего
  • разработка
  • деплой
  • SEO
  • 152-ФЗ/ПДн
  • контент