Иерархия шаблонов: путаница между index.php, front-page.php, home.php
Я действительно запутался с index.php
, home.php
и front-page.php
. Во многих случаях, даже когда у меня был index.php
, я перезаписывал его с помощью front-page.php
. Но недавно я узнал о home.php
.
- В чем разница между
home.php
иindex.php
? - В каких случаях лучше использовать
home.php
вместоindex.php
? - В каких случаях идеально использовать
front-page.php
? - Когда я использую
front-page.php
, какую конкретную задачу тогда выполняет для меняindex.php
?
Я прочитал Иерархию шаблонов в Codex. Пожалуйста, не путайте мой вопрос с шаблонами страниц, я их понимаю, альхамдулиЛЛАХ.

Логика главной страницы — одна из самых запутанных особенностей WordPress, и её крайне сложно объяснить и обобщить. Как я уже упоминал в комментарии ранее, я потратил огромное количество времени, чтобы собрать свою шпаргалку по логике главной страницы.
Но поскольку это популярная тема, позвольте мне попытаться ответить на ваши конкретные вопросы.
В чём разница между
home.php
иindex.php
?
home.php
— это шаблон для архива записей (архива стандартного типа записи Post, который является особым случаем в WP). WordPress будет пытаться использовать его для отображения списка записей, независимо от того, отображаются ли они в корне сайта или на специальной странице записей.
index.php
— это универсальный шаблон. Он является последним выбором во всех ветвях иерархии шаблонов и будет использоваться, когда ничего больше не подходит, как для архивов, так и для одиночных записей.
Только архив записей может использовать home.php
, но все остальные контексты могут и будут использовать index.php
.
В каких идеальных условиях следует использовать
home.php
вместоindex.php
?
Вы используете home.php
для настройки архива записей.
Вы используете index.php
, чтобы предоставить самый универсальный шаблон в вашей теме, подходящий для отображения чего угодно.
Некоторые темы предпочитают иметь пустой index.php
и обеспечивают наличие более специфичных шаблонов для всех возможных случаев, чтобы его никогда не приходилось использовать.
В каких идеальных условиях следует использовать
front-page.php
?
front-page.php
используется для архива записей в корне или статической главной страницы, если она включена.
Это шаблон с высоким приоритетом, поэтому если тема включает его, вы не можете выбрать произвольный шаблон для статической главной страницы. По этой причине он почти никогда не включается в публично распространяемые темы (что правильно).
Лучшее применение для него — в частных проектах, поскольку его проще настроить, чем шаблон страницы.
Когда я использую
front-page.php
, какую конкретную задачу тогда выполняет для меняindex.php
?
index.php
по-прежнему остаётся универсальным шаблоном для всех остальных случаев.
Если вы используете статическую главную страницу (к которой будет применяться front-page.php
), то ваша страница записей будет пытаться использовать сначала home.php
, а затем index.php
.

Файл front-page.php
является шаблоном главной страницы сайта. Он всегда будет использоваться для главной страницы вашего сайта, независимо от того, установлено ли значение get_option( 'show_on_front' )
в page
или posts
.
Файл шаблона home.php
— это шаблон индекса записей блога. Он всегда будет использоваться для отображения индекса записей блога, независимо от того, отображается ли индекс записей на главной странице сайта или на другой странице.
В случае, если существуют оба файла — front-page.php
и home.php
, и параметр get_option( 'show_on_front' )
установлен в posts
(т.е. главная страница сайта отображает индекс записей блога), файл front-page.php
будет иметь приоритет над файлом home.php
.
Файл index.php
является шаблоном-заглушкой по умолчанию для всех контекстов в Иерархии шаблонов. Он используется только в том случае, если для текущего контекста не существует более специфичного шаблона.
Иерархия шаблонов для главной страницы сайта:
front-page.php
- Если
'page' == get_option( 'show_on_front' )
: иерархия страниц - Если
'posts' == get_option( 'show_on_front' )
: иерархия индекса записей блога
Иерархия шаблонов для индекса записей блога:
home.php
index.php
Иерархия шаблонов для страниц:
- Пользовательский шаблон страницы
page-{slug}.php
page-{id}.php
page.php
index.php

Всё это следует из тщательного изучения Иерархии шаблонов.
home.php
используется, если:
- Главная страница вашего сайта настроена на отображение списка записей, или
- Настроена статическая главная страница, и
- Посетитель заходит на страницу, которую вы определили как "список записей" (например,
http://example.com/blog/
)
- И в теме присутствует файл
home.php
Если последнее условие не выполняется — то есть в теме нет файла home.php
— тогда будет загружен index.php
.
front-page.php
будет использоваться, если:
- Настроена статическая главная страница, и
- Посетитель заходит на страницу, которую вы определили как "статическую главную страницу" (то есть,
http://example.com/
), и - В теме присутствует файл
front-page.php
Если последнее условие не выполняется — то есть в теме нет файла front-page.php
— тогда будет загружен index.php
.
Вкратце
Если вы хотите настроить отображение списка записей, используйте home.php
.
Если вы хотите настроить отображение статической главной страницы, используйте front-page.php
.

Коротко:
index.php
— это шаблон-запасной вариант, который используется, если не найден подходящий шаблонhome.php
— используется для блога (список последних записей)front-page.php
— используется для главной (лендинг-страницы)
Универсальный шаблон index.php
Файл шаблона index.php
является запасным вариантом. Он используется в крайнем случае, когда нет других более подходящих шаблонов. Например, если у вас нет front-page.php
или home.php
, то будет использоваться index.php
. Это также верно для отсутствующих archive.php
, single.php
и так далее.
Разница между front-page.php
и home.php
Разница между шаблонами front-page.php
и home.php
заключается в том, что front-page.php
, как следует из названия, используется в качестве главной страницы сайта, в то время как home.php
предназначен для домашней страницы раздела Блог.
Какой шаблон будет использоваться для лендинг-страницы моего сайта?
Шаблон front-page.php
, если он есть, будет использоваться для главной страницы сайта (например, http://www.example.com/
). Если его нет, то вместо него будет использоваться home.php
. Если отсутствуют оба шаблона — front-page.php
и home.php
— то будет использован запасной шаблон index.php
.
Какой шаблон будет использоваться для страницы блога?
WordPress позволяет иметь страницу "Блог" (которая будет отображать последние записи) на отдельной странице, отличной от главной (например, http://www.example.com/blog/
). Если у вас именно такой случай, то страница блога всегда будет использовать шаблон home.php
. Если home.php
не существует, то будет использован запасной шаблон index.php
.
Как настроить главную страницу и страницу блога?
Чтобы настроить, какой контент отображать на главной странице, перейдите в Админку WordPress, раздел Настройки > Чтение. Там вы можете выбрать "На главной странице отображать" статическую страницу или последние записи.
Если вы выбрали отображение статической страницы на главной, то у вас также есть возможность указать, какая страница будет использоваться для блога (и для неё будет применён шаблон home.php
):

взято из Иерархии шаблонов WordPress
Отображение главной страницы
По умолчанию WordPress устанавливает главную страницу вашего сайта для отображения последних записей блога. Эта страница называется индексом записей блога. Вы также можете настроить отображение записей блога на отдельной статической странице. Файл шаблона home.php используется для вывода индекса записей блога, независимо от того, используется ли он в качестве главной страницы или на отдельной статической странице. Если home.php не существует, WordPress будет использовать index.php.
- home.php
- index.php
Примечание: Если существует front-page.php, он переопределит шаблон home.php.
Отображение фронт-страницы
Файл шаблона front-page.php используется для отображения фронт-страницы вашего сайта, независимо от того, отображает ли фронт-страница индекс записей блога (упомянутый выше) или статическую страницу. Шаблон фронт-страницы имеет приоритет над шаблоном индекса записей блога (home.php). Если файл front-page.php не существует, WordPress будет использовать либо home.php, либо page.php в зависимости от настроек в разделе Настройки → Чтение. Если ни один из этих файлов не существует, будет использоваться файл index.php.
1. front-page.php – Используется как для «ваших последних записей», так и для «статической страницы», установленных в разделе отображения фронт-страницы Настройки → Чтение.
2. home.php – Если WordPress не может найти front-page.php и в разделе отображения фронт-страницы установлено «ваши последние записи», он будет искать home.php. Кроме того, WordPress будет искать этот файл, когда страница записей установлена в разделе отображения фронт-страницы.
3. page.php – Когда в разделе отображения фронт-страницы установлена «главная страница».
4. index.php – Когда в разделе отображения фронт-страницы установлены «ваши последние записи», но home.php не существует, или когда установлена главная страница, но page.php не существует.
Как видите, существует множество правил, по которым WordPress выбирает путь. Использование приведенной выше схемы — лучший способ определить, что именно будет отображать WordPress.
Схема иерархии шаблонов:

Я решил проверить, какой шаблон используется для каждой из следующих страниц при различных настройках отображения главной страницы.
- example.net
- example.net/home/
- example.net/blog/
Результаты довольно объемные, но могут использоваться в качестве справочника или шпаргалки.
Источник: Чем отличаются шаблоны front-page.php и home.php в WordPress?
Примечание редактору: Я попытался скопировать и вставить таблицы здесь, но требуется формат markdown вместо HTML. Пожалуйста, преобразуйте в markdown, если это возможно.
