- WordPress. Порядок загрузки страницы
- 1. Загрузка файла wp-load.php
- 2. Загрузка файла wp-config.php
- 3. Загрузка файла wp-settings.php
- 4. Загрузка файла advanced-cache.php
- 5. Загрузка файла wp-content/db.php
- 6. Подключение к базе данных
- 7. Загрузка файла object-cache.php или wp-includes/cache.php
- 8. Загрузка файла wp-content/sunrise.php
- 9. Загрузка библиотеки локализации
- 10. Загрузка must use плагинов
- 11. Запуск события muplugins_loaded
- 12. Загрузка всех активированных плагинов
- 13. Загрузка файла pluggable.php
- 14. Запуск события plugins_loaded
- 15. Загрузка Rewrite Rules
- 16. Инициализация $wp_query, $wp_rewrite, $wp
- 17. Запуск события setup_theme
- 18. Загрузка файла functions.php дочерней темы
- 19. Загрузка файла functions.php родительской темы
- 20. Запуск события after_setup_theme
- 21. Настройка текущего пользователя
- 22. Запуск события init
- 23. Запуск события widget_init
- 24. Выполнение функции wp()
- 25. Запуск события template_redirect
- 26. Загрузка feed-шаблона для RSS
- 27. Загрузка основного шаблона (темы)
- 28. Запуск события shutdown
- Proper way to include PHP files in WordPress theme
- 5 Answers 5
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 закончена.
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.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (100)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (147)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (68)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (69)
- Компонент (60)
- Конфигурация (62)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (140)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (105)
- Установка (66)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)
Proper way to include PHP files in WordPress theme
When I review other developers themes I never stumble across a batch of «include() statements, so I believe I must be missing some standard method of performing these includes.
You may be interested to know common mistakes made in WP Theme Development, see this blog post: scriptbaker.com/common-mistakes-in-wordpress-theme-development
5 Answers 5
You can follow any method. But I suggest you to use require to include any file.
_s ( aka underscores ) which is theme starter kit and default themes of WordPress such as TwentyFourteen, TwentyThirteen, etc are using require to include files.
See sample code used in TweentyFourteen theme.
require get_template_directory() . '/inc/template-tags.php';
If you are doing it for Child theme you need to use stylesheet_directory instead of template_ e.g. require get_stylesheet_directory() . ‘/folder/file.php’;
If you are using child theme and need to load php file from child theme folder, you should use get_stylesheet_directory() function. get_stylesheet_directory()
Include will include the file content
Require will throw an error if file not found.
Include_once .. check if included if no then include
Require_once same as include_once but with error if file not found
So if you are the one who wrote the file you should include .. not include_once.
We usually, use include for unnecessary files. Require for important files. For example footer.php will not make script stop .. but core.php is important.
Why not put all the included files into a single file (library.php) and include that in your theme? By doing this if you need to change something you can change just one file. Also you can use conditional tags like if..else within the library.php to include specific files for certain pages.
I would also suggest that you use require_once() for important files so you get an error if the file is missing. If there is no error when a file is missing then functions that use that file will through multiple errors.
Also as @Othman has suggested you can use include for less important files.
Another method would be assigning a file and include it into your functions.php to avoid redundancy
For Example my functions.php in my root folder where i get my files from the /inc dir and the functions dir/
include('inc/assets.php'); //Where i register all css and js include('functions/index.php'); // Where are all functions are registered
assets (dir) - css (dir) - images (dir) - js (dir) inc (dir) template-parts (dir) - footer (dir) - header (dir) - navigation (dir) - page (dir) - post (dir) 404.php archive.php comments.php footer.php front-page.php functions.php header.php index.php page.php README.txt rtl.css screenshot.png search.php searchform.php sidebar.php single.php style.css