Оптимизация и разработка кастомной WordPress-темы Ezybrand

EZYBRAND.RU

Техническая миграция большого действующего сайта юридических услуг на собственную WordPress-тему. Основная цель проекта — сделать сайт быстрее и легче, сократить серверную нагрузку и убрать избыточные зависимости, не потеряв накопленный контент и рабочий функционал.

Для этого старый слой темы, Elementor и часть лишних компонентов постепенно заменялись собственными PHP-шаблонами, переиспользуемыми блоками и более простой архитектурой данных. Результат проверялся отдельными замерами производительности до и после перехода.

Главный экран сайта Ezybrand
Главная цельСкорость и снижение нагрузки
ПлатформаWordPress + SCF / ACF
PHP-генерация1,51 с → 0,70 с в среднем
Моя рольFrontend + Backend + WordPress
О проекте

Основная задача — облегчить большой WordPress-сайт, а не просто заменить его внешний вид

Ezybrand — большой сайт юридической компании с сотнями услуг и посадочных страниц, блогом, экспертным контентом, сервисами проверки товарных знаков, МКТУ, ФИПС, формами и внешними интеграциями.

За годы развития часть логики оказалась распределена между старой темой, Elementor, плагинами, статичными шаблонами и отдельными PHP/JavaScript-модулями. Такая конфигурация усложняла поддержку и создавала лишнюю нагрузку при формировании страниц.

Поэтому проект строился вокруг производительности: сохранить рабочие сценарии и SEO-структуру, но перенести сайт на более лёгкую кастомную тему, упростить путь WordPress до нужного шаблона и сократить объём дополнительной PHP-работы на каждом запросе.

Главная задача проекта
Производительность + техническая миграция

Сделать сайт быстрее и легче без потери существующего функционала

Задача была не в том, чтобы просто сверстать новый интерфейс. Нужно было уменьшить объём кода и компонентов, которые WordPress выполняет при каждом запросе, но при этом сохранить существующие URL, контент, сервисы, формы, блог и привычную работу редакции.

Лёгкая кастомная тема вместо универсального слоя

Основные страницы получили собственные PHP-шаблоны и подключают только ту разметку и логику, которая действительно нужна конкретному разделу сайта.

Постепенный отказ от Elementor

Известные Elementor-template вставки перенаправлены на локальные template-parts. Старые статьи продолжают работать, а новые страницы больше не требуют запускать конструктор ради типовых секций.

Сокращение избыточных компонентов

Часть функциональности, раньше зависевшей от темы и дополнительных компонентов, перенесена непосредственно в тему. Это уменьшило количество лишних обработчиков и дополнительной PHP-работы в жизненном цикле WordPress.

Сохранение сложного legacy-функционала

Brandbot, МКТУ, ФИПС, блоговые функции, CRM-логика и другие критичные сценарии не переписывались без необходимости, а были изолированы в отдельных модулях и подключаются там, где нужны.

Результат проверен замерами

Производительность сравнивалась на семи одинаковых типах страниц до и после перехода. Это позволило оценить не только субъективное ощущение скорости, но и реальное время PHP, потребление памяти и этапы выполнения WordPress.

Производительность

После перехода серверная генерация страниц ускорилась в среднем примерно в 2,2 раза

Поскольку ускорение было основной целью проекта, результат проверялся отдельно. Для старой и новой темы были замерены семь одинаковых типов страниц: главная, услуга, «О компании», блог, статья, глоссарий и проверка товарного знака.

PHP: −54%

Среднее время серверной генерации сократилось с 1506 до 696 мс. На уровне PHP новая версия в среднем заканчивает формирование страницы примерно в 2,2 раза быстрее.

Память: −46%

Пиковое потребление памяти уменьшилось с 54,6 до 29,7 MB. Один запрос теперь обычно требует 28–32 MB вместо прежних 54–56 MB.

До −67% на тяжёлых страницах

Глоссарий ускорился с 1885 до 614 мс, а страница проверки товарного знака — с 1586 до 590 мс. Блог сократил PHP-время с 1206 до 539 мс, главная — с 1784 до 883 мс.

Выбор шаблона: 26,7 → 0,25 мс

Этап template_redirect → template_include практически перестал влиять на время ответа. Более простая структура новой темы позволяет WordPress почти сразу перейти к нужному PHP-шаблону.

Завершение запроса: −82%

Участок wp_footer → shutdown сократился в среднем с 295 до 54 мс. На старой версии после формирования страницы оставалось ещё до 0,25–0,37 секунды дополнительной PHP-работы.

Ускорение видно и в браузере

Network-замеры основного HTML также стали ниже: например, главная сократилась примерно с 1,76–2,35 до 0,84–1,01 секунды, а глоссарий — с 1,83–2,26 до 0,71–0,76 секунды.

За счёт чего сайт стал быстрее

Ускорение получилось за счёт упрощения всей цепочки формирования страницы

Вместо старой темы и части функционала, завязанного на Elementor и дополнительные компоненты, сайт переведён на собственные PHP-шаблоны и переиспользуемые template-parts. Нужные сценарии сохранены, но сама цепочка формирования страниц стала проще: WordPress выполняет меньше промежуточной логики и быстрее переходит к конкретному шаблону. Особенно это видно по этапу template_redirect → template_include, который сократился в среднем с 26,7 до 0,25 мс.

Одновременно сократилось количество дополнительной работы на общих WordPress hooks. Поэтому сильнее всего ускорились подготовительные и завершающие этапы: промежуток после after_setup_theme до init уменьшился примерно на 96%, переход от init к wp_loaded — на 85%, а участок wp_footer → shutdown — примерно на 82%.

Сама архитектура стала более прямой: услуги, сотрудники и другие сущности оформлены как CPT и таксономии, общие данные вынесены в SCF Options, повторяющиеся секции — в единые блоки, а страницы в основном занимаются сборкой нужных данных и подключением готовых компонентов. В результате сложный функционал сохранился, но серверу требуется меньше PHP-работы и памяти для формирования каждого запроса.

Страницы услуг
Услуги и посадочные страницы

Сотни страниц переводятся из отдельных макетов в единую систему блоков

Для сайта услуг важно одновременно сохранять уникальный SEO-контент каждой страницы и не превращать поддержку в редактирование десятков разных шаблонов. Поэтому страницы услуг построены поверх одной структуры данных и набора переиспользуемых flexible-блоков.

Услуги как отдельный CPT

Услуги хранятся в CPT uslugi, а направления — в таксономии uslugi_group. Страницы групп собираются автоматически из связанных услуг и учитывают заданный порядок.

Flexible Content вместо отдельной вёрстки

После первого экрана редактор собирает страницу из готовых блоков: текста, карточек, этапов, аккордеонов, тарифов, сравнений, документов, видео, команды и других секций.

Новые страницы без привлечения разработчика

В рамках заложенной архитектуры можно собирать полноценные новые страницы из существующих секций. Пользователь меняет содержание и порядок блоков, но ему не приходится самостоятельно решать, как они должны быть свёрстаны.

Тарифы как переиспользуемые сущности

CPT tarify используется как централизованное хранилище карточек и таблиц сравнения. Один тариф можно подключать в разные страницы без копирования одинаковых данных.

Контент и шаблон разделены

Имена полей SCF становятся частью стабильного контракта между админкой и темой, а визуальное представление остаётся внутри контролируемых PHP-шаблонов.

Архитектура контента

Данные вынесены из шаблонов и перестали дублироваться по сайту

Одна из задач миграции — не просто перенести внешний вид, а привести контент к структуре, которую можно поддерживать из админки. Повторяющиеся данные теперь хранятся централизованно, а шаблоны отвечают в основном за сбор данных и композицию страницы.

Глобальные настройки

Телефоны, email, адреса, реквизиты, клиенты, отзывы, логотипы, данные глоссария и другие повторяющиеся сущности вынесены в SCF Options Pages. Изменение в одном месте автоматически используется во всех связанных блоках.

Команда как CPT

Сотрудники хранятся в CPT team и могут использоваться на персональной странице, в общем списке, в сертификатах и в контентных блоках. Связь с WordPress-пользователем позволяет автоматически подтягивать статьи конкретного специалиста.

Клиенты и отзывы без хардкода

Логотипы клиентов, отзывы и рекомендательные письма больше не зашиты в конкретные страницы. Они редактируются централизованно и переиспользуются в слайдерах, отдельных страницах и других секциях.

Повторяемая разметка в template-parts

Меню, формы, контакты, команда, отзывы, flexible-блоки и другие повторяющиеся элементы вынесены в отдельные шаблонные части. Это уменьшает дублирование и делает изменения предсказуемыми.

Автоматические страницы и навигация

Группы услуг, карта сайта и ряд связанных списков формируются из опубликованных сущностей WordPress. При добавлении нового материала не приходится вручную поддерживать параллельные статичные списки.

Сложный функционал

Новая тема сохранила сервисы, которые выходят далеко за рамки обычного корпоративного сайта

В Ezybrand есть не только страницы услуг и статьи. На сайте работают собственные поисковые и расчётные сценарии, интеграции с внешними системами и legacy-модули, которые было важно сохранить при миграции.

МКТУ

Поиск по локальной базе классов и товаров

Поиск по МКТУ работает на локальной базе данных и собственных PHP/JavaScript-обработчиках. Пользователь может искать классы, товары и услуги, собирать перечень и выгружать результат в PDF или CSV.

Товарные знаки

Онлайн-проверка через Brandbot API

Сценарий проверки товарного знака сохранён как отдельный модуль: frontend отправляет запрос в локальные обработчики темы, а те работают с Brandbot API и возвращают данные в собственные карточки результата.

ФИПС

Проверка состояния делопроизводства

Отдельная страница получает и обрабатывает данные ФИПС через собственную PHP/JavaScript-связку. Этот функционал перенесён в новую тему без необходимости оставлять старый шаблон целиком.

Формы и CRM

UTM-данные и Bitrix24 остались частью общей архитектуры

Legacy-логика форм, UTM/cookie-данных и создания лидов в Bitrix24 сохранена отдельными модулями. При смене темы не пришлось заново строить критичный для бизнеса процесс передачи заявок.

В результате новая тема не стала «облегчённой версией» сайта с урезанным функционалом. Сложные сервисы были сохранены, но получили понятное место в новой архитектуре и больше не требуют держать старую тему ради нескольких критичных сценариев.

Блог и старый контент
Legacy-совместимость

Большой архив статей не пришлось переписывать ради новой темы

Блог Ezybrand содержит старые редакторские вставки и дополнительные сценарии, которые появились задолго до новой темы. Вместо жёсткого отказа от них была сохранена совместимость, а новые части постепенно переведены на локальные компоненты.

Стандартные WordPress-записи

Сам контент остаётся в обычных записях post, а дополнительная логика подключается отдельными шаблонами и SCF-полями.

AJAX-пагинация и комментарии

Сохранены интерактивные сценарии блога, которые уже использовались на действующем сайте и были привычны редакции и пользователям.

PDF и подписка

Статьи можно формировать в PDF через mPDF, а существующая подписка продолжает работать через DashaMail.

Старые вставки без Elementor

Для известных Elementor-template ID используются локальные PHP-шаблоны. Это позволяет постепенно убирать зависимость от конструктора, не ломая старые публикации.

Архитектура новой темы

Тема стала не набором шаблонов, а техническим каркасом всего сайта

Основная идея архитектуры — отделить контент, повторяемую разметку и специализированную бизнес-логику друг от друга. Благодаря этому новую функциональность можно добавлять точечно, а не продолжать наращивать один общий legacy-слой.

WordPress хранит данные

Стандартный контент, CPT, таксономии и SCF Options Pages становятся единым источником данных для страниц. Шаблоны не содержат независимые копии одних и тех же сущностей.

Страницы отвечают за композицию

Специальные page-*.php, single-*.php и taxonomy-шаблоны собирают нужные данные и подключают переиспользуемые секции, не смешивая всю логику в одном файле.

Повторяемые блоки изолированы

template-parts/blocks и template-parts/flexible отвечают за повторно используемые компоненты. Один блок можно менять централизованно для всех страниц, где он подключён.

Сложные сервисы вынесены в модули

Blog, Brandbot, МКТУ, ФИПС, UTM и CRM-логика подключаются отдельными файлами из inc/. Это даёт понятные границы ответственности и упрощает дальнейший рефакторинг.

Миграционные инструменты отделены от production-кода

Одноразовые импортёры хранятся отдельно и не подключаются в обычной работе темы. Их можно использовать при переносе данных, не оставляя миграционную логику активной на каждом запросе.

Технологии

Что под капотом

WordPress PHP JavaScript / jQuery SCF / ACF Custom Post Types Custom Taxonomies Flexible Content AJAX Brandbot API Bitrix24 DashaMail mPDF Swiper Yoast SEO

Кастомная классическая WordPress-тема объединяет собственные шаблоны, SCF-структуру данных, flexible-блоки, переиспользуемые template-parts и перенесённые сервисные модули. Главный результат — сайт сохранил накопленный функционал, но стал существенно легче: серверная генерация в среднем ускорилась примерно в 2,2 раза, потребление памяти снизилось, а новая архитектура стала понятнее для дальнейшей поддержки и развития.

WordPress-сайт стал слишком тяжёлым?

Могу разобрать, что создаёт лишнюю нагрузку, перенести действующий проект на более лёгкую кастомную тему без пересборки контента с нуля, сохранить нужные страницы и интеграции и проверить результат отдельными замерами производительности.

    Имя
    Телефон / Telegram
    Опишите задачу или прикрепите ссылку
    Ответ обычно в течение рабочего дня