WordPress. Порядок загрузки страницы

12.08.2019

Теги: CMSHookWeb-разработкаWordPressЗапросПроцессСобытиеФайлФункция

Итак, пользователь набрал в адресной строке браузера URL WordPress-сайта и нажал Enter. Произошел резолвинг доменного имени, и браузер обратился по конкретному IP-адресу к хостинг-серверу с запросом на загрузку сайта. Что происходит дальше в последующие доли секунды, пока сайт не отобразится в окне браузера?

1. Загрузка файла wp-load.php

Все начинается с загрузки файла wp-load.php в корневом каталоге сайта.

2. Загрузка файла wp-config.php

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

3. Загрузка файла wp-settings.php

Установка значений констант WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT, WP_DEBUG, SCRIPT_DEBUG, WP_CONTENT_DIR, WP_CACHE и других.

4. Загрузка файла advanced-cache.php

Загрузка advanced-cache.php, если этот файл существует. В терминологии плагинов WordPress этот файл является так называемым «вкраплением». Он создается автоматически, если на сайте установлен один из кеш-плагинов. Этот файл содержит конфигурационную информацию для работы кеширования.

5. Загрузка файла wp-content/db.php

WordPress позволяет разработчикам создавать свои абстрактные слои БД и загружать их через файл db.php. Как правило, этот файл используется кеш-плагинами для оптимизации работы БД. Поэтому, если такой файл существует, он загружается на этом этапе.

6. Подключение к базе данных

Соединение с сервером MySQL и подключение к указанной в wp-config.php или db.php базе данных. Если по какой-то причине WordPress не удается подключиться к БД — будет выдано сообщение «Error establishing database connection».

7. Загрузка файла object-cache.php или wp-includes/cache.php

Загрузка файла object-cache.php, если такой есть. Если нет, попытка загрузить файл cache.php в директории wp-includes. Если и этого файла нет, то следующий шаг.

8. Загрузка файла wp-content/sunrise.php

Если сайт является частью сети (режим Multisite), то будет загружен файл wp-content/sunrise.php.

9. Загрузка библиотеки локализации

Загрузка файла wp-includes/l10n.php для включения системы локализации. На данном этапе будет учтен выбранный язык, региональные параметры и файлы для перевода.

10. Загрузка must use плагинов

Загрузка обязательных к использованию плагинов. Это плагины, которые устанавливаются в специальную папку mu-plugins и которые всегда активны для сайта и сайтов сети.

11. Запуск события muplugins_loaded

Т.е. будет вызвана функция do_action() с параметром muplugins_loaded. Как следствие — будут вызваны все функции, привязанные к этому событию с помощью add_action().

12. Загрузка всех активированных плагинов

Список активированных плагинов хранится в таблице wp_options базы данных, имя опции — active_plugins. Таким образом на этапе загрузки игнорируются все установленные, но неактивные плагины.

13. Загрузка файла pluggable.php

Файл pluggable.php хранит функции, которые могут быть переопределены WordPress-плагинами. WordPress проверит, определены ли функции из файла pluggable.php какими-то другими активными плагинами. Если нет, будут определены функции из pluggable.php.

14. Запуск события plugins_loaded

Т.е. будет вызвана функция do_action() с параметром plugins_loaded. Как следствие — будут вызваны все функции, привязанные к этому событию с помощью add_action().

15. Загрузка Rewrite Rules

Будут загружены правила преобразования ссылок. Другими словами, на сайте все ссылки будут search engine friendly, вместо ссылок вида www.server.com/?p=12345

16. Инициализация $wp_query, $wp_rewrite, $wp

Инициализация глобальных переменных:

  • $wp_query — содержит экземпляр класса WP_Query
  • $wp_rewrite — содержит экземпляр класса WP_Rewrite
  • $wp — содержит экземпляр класса WP

17. Запуск события setup_theme

Т.е. будет вызвана функция do_action() с параметром setup_theme. Как следствие — будут вызваны все функции, привязанные к этому событию с помощью add_action().

18. Загрузка файла functions.php дочерней темы

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

19. Загрузка файла functions.php родительской темы

Если используется дочерняя тема, то после загрузки functions.php из дочерней темы будет загружен functions.php родительской темы.

20. Запуск события after_setup_theme

Событие запускается после того, как WordPress определился с тем, какая тема оформления активна на данный момент, и загрузил ее файл functions.php.

21. Настройка текущего пользователя

Теперь WordPress загружает объект текущего пользователя. Это позволяет понять, какие запросы могут быть выполнены в дальнейшем в соответствии с текущей ролью пользователя и его привилегиями.

22. Запуск события init

На данном этапе WordPress загрузил уже все необходимое для работы. Это самое популярное событие у разработчиков — ядро загружено, плагины и тема активированны, пользователь авторизован, но на экран еще ничего не выведено.

23. Запуск события widget_init

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

24. Выполнение функции wp()

Теперь WordPress вызывает функцию wp() из файла wp-includes/functions.php. Эта функция устанавливает основной запрос, т.е. среду WordPress.

Посмотрим на код, как устанавливается среда WordPress:

function wp($query_vars = '') {
    global $wp, $wp_query, $wp_the_query;
    $wp->main($query_vars);

    if (!isset($wp_the_query)) {
        $wp_the_query = $wp_query;
    }
}
class WP {
    /*...*/
    public function main($query_args = '') {
        $this->init();                     // устанавливает текущего пользователя
        $this->parse_request($query_args); // разбирает указанные параметры запроса и параметры URL (ЧПУ)
        $this->send_headers();             // устанавливает header() заголовки
        $this->query_posts();              // получает записи по параметрам запроса
        $this->handle_404();               // выставляет статус 404, если записей по запросу не найдено
        // устанавливает глобальные переменные: $query_string, $posts, $post, $request, $more, $single, $authordata
        $this->register_globals();

        // фильтр среды WordPress после того, как она была установлена
        do_action_ref_array('wp', array(&$this));
    }
    /*...*/
}

Фильтр request срабатывает в конце метода WP::parse_request(), позволяя изменить свойство WP::query_vars, которое содержит переменные запроса, используемые в методе WP::query_posts().

Фильтр parse_request срабытывает в конце метода WP::parse_request(), сразу после фильтра request. В фильтр передается экземпляр класса WP по ссылке, так что можно изменить не только переменную класса $query_vars, но и другие переменные.

Фильтр pre_get_posts срабатывает абсолютно для всех запросов, не только для основного. Для основного запроса (из кода выше) он срабатывает во время вызова метода WP::query_posts(), т.е. после request и parse_request.

Фильтр wp срабытывает в конце метода WP::main(), в этот момент записи уже получены. В фильтр передается экземпляр класса WP по ссылке. Это самое раннее событие, когда работают условные теги.

25. Запуск события template_redirect

Событие происходит прямо перед тем, как WordPress определяет, какой шаблон должен быть использован.

26. Загрузка feed-шаблона для RSS

Если запрашиваемый контент относится к RSS-feed, WordPress загружает соответствующий feed-шаблон.

27. Загрузка основного шаблона (темы)

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

28. Запуск события shutdown

В самом конце, перед завершением исполнения всего PHP-кода WordPress запускает последнее событие shutdown. На этом этапе работа WordPress закончена.

Поиск: CMS • Hook • Web-разработка • WordPress • Запрос • Процесс • Событие • Файл • Функция

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.