1. Архитектура WordPress: ядро, жизненный цикл, структура проекта
Архитектура WordPress: ядро, жизненный цикл, структура проекта
WordPress часто воспринимают как набор шаблонов и плагинов, но для глубокой разработки важно видеть его как платформу с четким процессом загрузки (bootstrap), жизненным циклом запроса и контрактами расширения. Эта статья закладывает фундамент: как устроено ядро, какие шаги проходит любой запрос и где в проекте что лежит.
Из чего состоит WordPress
На практике WordPress можно представить как три слоя:
Ключевой принцип: ядро не модифицируют напрямую. Все изменения вносятся через плагины, темы и хуки.
Ядро WordPress
Ядро включает:
Официальные справочники:
wp-content: где живет ваш код
Вся расширяемость сосредоточена в wp-content:
wp-content/plugins — плагиныwp-content/mu-plugins — must-use плагины (включены всегда)wp-content/themes — темыwp-content/uploads — медиафайлы (загрузки)> Важно: все, что должно переживать смену темы, почти всегда должно быть плагином, а не кодом темы.
Конфигурация и окружение
wp-config.php задает подключение к базе, соли, префикс таблиц, режим отладки и другие параметры.См. документацию:
Структура проекта WordPress
Типичная структура установки:
index.php
- wp-admin/
- wp-includes/
- wp-content/
- wp-config.php!Дерево ключевых директорий WordPress и назначение wp-content
Зачем разделение на wp-admin, wp-includes и wp-content
wp-admin — код админки (панель управления)wp-includes — большая часть библиотек ядраwp-content — ваш код и данные, которые не должны перетираться обновлением ядраЭто разделение обеспечивает обновляемость: ядро можно обновлять, не затрагивая плагины/темы.
Плагины, MU-плагины и темы: что когда использовать
| Механизм | Когда подходит | Когда не подходит |
|---|---|---|
| Плагин | Функциональность, независимая от дизайна: CPT, REST endpoints, интеграции, платежи, кеширование, шорткоды | Для логики, завязанной на конкретную тему и ее разметку |
| MU-плагин (mu-plugins) | Код, который обязан быть включен всегда: обязательная безопасность, корпоративные политики, критичные интеграции | Когда нужен UI включения/выключения, настройки, зависимости от порядка загрузки обычных плагинов |
| Тема | Представление: шаблоны, стили, компоненты интерфейса, небольшая glue-логика для вывода | Для бизнес-логики, которая должна пережить смену темы |
О MU-плагинах:
Жизненный цикл запроса: что происходит от HTTP до HTML
Под жизненным циклом понимают последовательность шагов, через которые проходит WordPress при обработке запроса.
Ниже — упрощенная, но практичная модель для разработчика тем и плагинов.
!Последовательность загрузки WordPress и ключевые этапы для подключения кода
Bootstrap: стартовые файлы загрузки
В типичном запросе фронтенда цепочка начинается так:
index.php в корнеwp-blog-header.phpwp-load.phpwp-config.phpwp-settings.phpТочка, где в игру входят плагины и тема, фактически начинается в wp-settings.php: там инициализируются константы, подключаются файлы ядра, запускается система хуков и начинается загрузка расширений.
Порядок подключения расширений (упрощенно)
Важно понимать именно порядок, потому что он определяет, какие функции уже доступны и на какие хуки вы успеете подписаться.
wp-content/mu-plugins)wp-content/plugins)functions.phpПрактическое следствие:
Типы запросов в WordPress
Один и тот же сайт может обслуживать разные сценарии, и в каждом жизненный цикл чуть отличается:
/wp-admin/)admin-ajax.php)/wp-json/...)Почему это важно:
Хуки (actions и filters): основной контракт расширения
WordPress расширяется через систему хуков:
Документация:
Пример фильтра (меняем содержимое поста):
Пример action (подключаем скрипты):
Ключевые этапы и популярные хуки жизненного цикла
Ниже — ориентир, где обычно подключают разные типы логики:
muplugins_loaded — MU-плагины загружены
- plugins_loaded — загружены обычные плагины
after_setup_theme — тема объявляет поддержку возможностей, регистрирует меню и т.п.
init — один из главных хуков для регистрации: CPT, таксономии, rewrite, обработка форм
- wp_loaded — WordPress загружен, можно опираться на большее количество подсистем
parse_request, wp, template_redirect
wp_head, wp_footer
shutdownРекомендация по стилю: регистрируйте функциональность (CPT, таксономии) на init, а вещи, завязанные на тему (например, add_theme_support) — на after_setup_theme.
Как WordPress выбирает шаблон: Template Hierarchy
Когда WordPress понял, какой контент хотят, он подбирает PHP-файл шаблона в теме по правилам иерархии шаблонов.
Примеры ситуаций:
Документация:
Практическая мысль для разработки: тема — это не один файл, а набор точек переопределения. Чем лучше вы понимаете иерархию, тем меньше условных операторов вам нужно внутри шаблонов.
Точка входа данных: база и глобальные объекты
WordPress хранит данные в базе (обычно MySQL/MariaDB), а доступ организует через API и ключевые объекты:
WP_Query — формирует основной запрос (что показать)wpdb — низкоуровневый доступ к базе (использовать осторожно)На уровне тем важнее всего понимать цикл (Loop): WordPress подготавливает набор постов, а шаблон выводит их.
Практические правила архитектуры для разработчика
wp-admin и wp-includes: обновление ядра перетрет изменения.require.Что дальше по курсу
Дальнейшие темы логично строятся на этой базе: