wordpress — это самая популярная бесплатная платформа для создания сайтов в интернете. И свою популярность WordPress заслужил в основном благодаря тому, насколько легко и просто с ним работать.
Для того, чтобы создать свой сайт на WordPress, не нужно разбираться в коде и знать, как все утроено. Но если вы начинающий разработчик или просто опытный пользователь, и вам интересно узнать, как работает WordPress, тогда эта статья для вас.
Смотрите также:
- Советы для начинающих разработку сайта на WordPress
- Куда вставлять этот код в WordPress? Общая структура файлов темы
- Как создать дочернюю тему WordPress — Правильный способ
- Как лучше — добавить свой код в functions.php или создать кастомный плагин на WordPress?
- 8 вариантов создания тестовой среды для разработки на WordPress
- WordPress Codex — ценный помощник разработчика
В этом посте мы разберемся шаг за шагом, что происходит внутри WordPress, когда вы загружаете сайт в браузере, и поэтапно распишем порядок загрузки функций и файлов WordPress. Поехали!
Зачем нужно знать, как работает WordPress?
wordpress — это open-source проект, а значит любой может изучать его исходный код и учиться создавать свои плагины и шаблоны.
Если вы будете знать основы того, как работает WordPress под капотом, это поможет вам углубить свои познания в разработке. Также это просто познавательно с точки зрения того, как, казалось бы, элементарные вещи на самом деле.
Порядок загрузки WordPress
Итак, вы вбили в адресную строку браузера URL WordPress-сайта и нажали Enter. Произошел резолвинг доменного имени, и ваш браузер обратился по конкретному IP-адресу к хостинг-серверу с запросом на загрузку сайта.
Что происходит дальше в последующие доли секунды, пока сайт не отобразится в окне браузера?
1. Загрузка файла wp-config.php
В первую очередь идет обращение к главному конфигурационному файлу wp-config.php в корневом каталоге WordPress.
Оттуда извлекаются глобальные переменные для WordPress сайта, а также информация для подключения к Базе Данных.
2. Загрузка стандартных констант
После загрузки wp-config.php WordPress извлекает значения стандартных констант. Они включают такую информацию как расположение upload-каталога (wp-content/), максимальный размер файла и все остальные константы, которые прописаны в wp-config.php.
3. Загрузка файла advanced-cache.php
Если файл advanced-cache.php есть на сайте, WordPress загружает его на данном этапе. Этот файл является так называемым "Вкраплением" в терминологии плагинов WordPress.
Он создается автоматически, если на сайте настроен один из кэш-плагинов. Этот файл содержит конфигурационную информацию для работы кэширования сайта.
4. Загрузка файла wp-content/db.php
WordPress позволяет разработчикам создавать свои абстрактные слои БД и загружать их через файл db.php. Как правило, этот файл может использоваться некоторыми кэш-плагинами для оптимизации работы БД.
Поэтому, если такой файл существует, он загружается на этом этапе.
5. Подключение к MySQL и Базе Данных
Теперь у WordPress достаточно информации для соединения с MySQL сервером и подключения к указанной в wp-config.php или db.php Базе Данных.
Если по какой-то причине WordPress не удается подключиться к БД, вы увидите на экране сообщение "Error establishing database connection" на белом фоне.
6. Загрузка файла object-cache.php или wp-includes/cache.php
WordPress теперь загрузит файл object-cache.php, если такой есть. Если нет, то попытается загрузить файл wp-includes/cache.php. Если и такого нет, то следующий шаг.
7. Загрузка файла wp-content/sunrise.php
Если сайт является частью Мультисайт-сети WordPress, то будет загружен файл wp-content/sunrise.php.
8. Загрузка библиотеки локализации
Теперь загружается файл wp-includes/l10n.php для включения системы локализации. На данном этапе будет учтен выбранный язык, региональные параметры и файлы для перевода.
9. Загрузка Multisite-плагинов
Опять же, если сайт находится в сети wordpress Multisite, теперь будут загружены Multisite-плагины.
10. Выполнение функции "muplugins_loaded"
Выполняется функция (или в терминологии WordPress - Action) muplugins_loaded для сетевых плагинов wordpress Multisite.
11. Загрузка всех активированных плагинов
WordPress теперь загрузит все остальные активированные плагины на сайте.
Список активированных плагинов хранится в Базе Данных в таблице wp_options в поле active_plugins.
Таким образом на этапе загрузки игнорируются все установленные, но неактивные плагины.
12. Загрузка файла pluggable.php
Файл pluggable.php хранит функции, которые могут быть переопределены WordPress-плагинами.
WordPress проверит, определены ли функции из файла pluggable.php какими-то другими активными плагинами. Если нет, будут определены функции из pluggable.php.
13. Выполнение функции "plugins_loaded"
Аналогично muplugins_loaded для плагинов wordpress Multisite, теперь будет выполнена функция plugins_loaded. Эта функция позволяет разработчикам привязать свои собственные функции и выполнить их после загрузки всех активных плагинов WordPress.
14. Загрузка Rewrite Rules
Будут загружены правила переопределения ссылок.
Другими словами, будут загружены SEO-понятные постоянные ссылки вместо ссылок вида /?p=10467
15. Инициализация $wp_query, $wp_rewrite, $wp
Теперь WordPress загрузит такие объекты:
- $wp_query: Глобальная переменная, которая содержит класс WP_Query. Она сообщает WordPress, что контент запрашивается в типичном для WordPress query-формате.
- $wp_rewrite: Глобальная переменная, которая содержит класс WP_Rewrite. Содержит Rewrite-правила и функции для переопределения URL при загрузке контента.
- $wp: Глобальная переменная, которая содержит класс WP. Содержит функции, которые будут парсить ваш запрос и выполнять загрузку главной очереди (main query).
16. Выполнение функции "setup_theme"
WordPress выполняет функцию setup_theme, необходимую на этапе перед загрузкой темы оформления.
17. Загрузка файла functions.php дочерней темы
Файл functions.php содержит набор функций и инструкций, применимых для каждой темы оформления индивидуально.
Если вы используете дочернюю тему, то на данном этапе будет загружен functions.php именно дочерней темы.
В противном случае будет загружен functions.php от основной активной темы оформления.
18. Загрузка файла functions.php родительской темы
Если используется дочерняя тема, то после загрузки functions.php из дочерней темы будет загружен functions.php основной родительской темы.
19. Выполнение функции "after_setup_theme"
Функция after_setup_theme исполняется после того, как WordPress определился с тем, какая тема оформления активна на данный момент, и загрузил ее файл functions.php.
Это первое действие применимое к активное теме.
20. Настройка текущего User Object
Теперь WordPress загружает объект текущего пользователя. Это позволяет WordPress понять, какие запросы могут быть выполнены в дальнейшем в соответствии с текущей ролью пользователя и его привилегиями.
21. Выполнение функции "init"
На данном этапе WordPress загрузил уже всю необходимую информацию для работы. Теперь выполняется функция init.
Эта функция позволяет разработчикам добавлять свой код, который должен быть выполнен сразу после того, как WordPress загрузил и выполнил все предыдущие пункты.
22. Выполнение функции "widget_init"
Функция widget_init позволяет разработчикам регистрировать виджеты и выполнять код, необходимый для работы виджетов.
23. Выполнение функции "wp()"
Теперь WordPress вызывает функцию wp() из файла wp-includes/functions.php.
Эта функция задает глобальные переменные $wp, $wp_query, $wp_the_query и дальше вызывает $wp->main.
24. Парсинг запросов
У WordPress теперь есть вся нужная информация для обработки пользовательских запросов. Для начала идет проверка на rewrite-правила переопределения.
Затем загружаются все фильтры, action-хуки и отправляется запрос на загрузку header-части сайта.
25. Выполнение запросов
Если по заданному запросу контент не обнаружен, WordPress определяет переменную is_404.
В противном случае WordPress продолжает загрузку остальных запросов.
- Будет выполнено WP_Query->get_posts()
- Далее запускается функция DO_ACTION_REF_ARRAY ‘pre_get_posts’ для объекта WP_Query.
- Теперь выполняется apply_filters для зачистки запросов и некоторых финальных проверок.
- Теперь загружаются сами записи (посты) из БД, применяются фильтры posts_results и the_posts.
Этап выполнения запросов закончен, и WordPress выдает загруженные записи.
26. Выполнение функции template_redirect
Выполняется функция template_redirect прямо перед тем, как WordPress определяет, какой шаблон загружать.
27. Загрузка Feed-шаблона для RSS
Если запрашиваемый контент относится к RSS-feed, WordPress загружает соответствующий Feed-шаблон.
28. Загрузка основного шаблона (темы)
Наконец-то!
WordPress начинает загружать файлы текущей активной темы в соответствии с ее иерархией.
Как правило все начинается с файла, который содержит главный цикл (WordPress Loop).
29. Выполнение функции "shutdown"
В самом конце перед завершением исполнения всего PHP-кода WordPress запускает последнюю функцию shutdown.
На этом этапе работа WordPress выполнена и закончена.
30. Загрузка страницы сайта в браузере
Весь "подготовленный" PHP-код со стороны WordPress передается на исполнение веб-серверу хостинга.
Веб-сервер обрабатывает PHP-код и передает в браузер пользователю готовый HTML-код вместе со стилями и скриптами (CSS и JavaScript) для загрузки самой страницы.
Браузер производит рендеринг этой страницы с помощью полученного от веб-сервера HTML, CSS и JavaScript, и в результате вы видите (визуально) запрошенную страницу сайта.
Итоги
Итак, мы расписали подробно 30 шагов, которые необходимы WordPress для загрузки сайта. Ну окей, последний 30-ый пункт выполняется уже без участия WordPress, но все же.
А теперь задумайтесь!
Все эти 30 пунктов от момента нажатия Enter в адресной строке браузера и до загрузки страницы происходят буквально за считанные миллисекунды! Фантастика, правда?
Комментарии к записи: 1
Привет! А есть ли возможность на финальном этапе перед окончанием работы php когда срабатывает хук shutdown — получить доступ ко всему HTML содержимому страницы для финальной правки. Например, мне нужно при определенных условиях подправить ссылки и т.п.?