Файлы темы в WordPress. Их иерархия и порядок подключения.

Тут конечно офигенный контент, однако если вам вдруг захочется больше практики.

Редактировали какие-нибудь готовые темы для WordPress? Наверное заметили, что в каждой своя структура файлов.

Например в одной из них за вывод рубрик отвечает category.php, а в другой это archive.php, в третьей вообще отсутствуют оба. Почему так?

Это потому, что существует порядок, следуя которому WordPress, в зависимости от текущей страницы сайта, ищет соответствующие файлы в директории темы и, если они существуют — подключает.

Этот пост должен раз и навсегда ответить на вопрос — какой из PHP-файлов темы используется для отображения той или иной страницы сайта?

Условные теги WordPress

Условные теги — это функции, которые позволяют определить что-либо и дать однозначный ответ (логическое true или false). «Условные» потому что практически всегда используются внутри условия if.

К примеру, функция is_single() позволяет определить, находимся ли мы, просматривая сайт в данный момент, на странице поста.

if( is_single() ) {}

Полный список условных тегов WordPress и их документацию вы найдёте здесь.

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

Схема порядка подключения файлов шаблона

Кликните по картинке, чтобы открыть в полном размере.

Иерархия порядок подключения файлов темы WordPress

На графике показан порядок, по которому WordPress запрашивает файлы. Есть и альтернативные варианты этой схемы, чуть более старые или урезанные, но рабочие, вот первый, а вот второй.

А теперь разберемся, что означает каждая переменная (на графике — со знаком $).

$id
Ну насчет ID понятно. Немного дополнительной информации вы найдете в этих статьях:

$slug
Наряду с названием и айдишником, каждый объект в WordPress, будь то посты, комментарии или таксономии (искл. пользователи) имеет ярлык (или слаг). Так же, как и название объекта, ярлык задается в админке самим пользователем.
$nicename
Это ник автора, и под ником подразумевается user_nicename — на моём опыте всегда совпадало с user_login (именем пользователя).
$taxonomy
Название таксономии
$term
Ярлык элемента таксономии
$posttype
Название типа поста, для которого используем данный шаблон.
$mimetype, $subtype
Как вы возможно уже поняли из схемы, это актуально для страницы вложений.

Предположим, что во вложении у нас картинка PNG, то есть image/png — для данного примера переменные принимают значения image = $mimetype, png = $subtype, image-png = $mimetype-$subtype, по приоритету — в перечисленном порядке, как на схеме.

$custom
Название файла шаблона страниц — про них всё подробно расписано здесь.

Примеры

Сразу же приведу пример для страницы с рубрикой с ID = 54 и ярлыком myphotos:

  1. category-myphotos.php в первую очередь WordPress ищет этот файл в папке с темой, если его не существует, то файл со следующего пункта списка,
  2. category-54.php если и этого файла нет в директории темы, то переходим к следующему пункту и так далее,
  3. category.php,
  4. archive.php,
  5. index.php;

Следующий момент, который может быть не до конца понятен, отображён на этой части схемы:

Использование шаблонов страниц в иерархии WordPress

Для страниц добавлен блок с условием «Используется ли шаблон страницы», а для записей и других типов постов — нет. На самом деле начиная с версии WordPress 4.7 можно использовать шаблоны страниц и для записей других типов, на этой схеме это тоже показано — custom.php это и есть произвольный шаблон, просто для страниц и других типов постов эта часть схемы немного отличается, хотя суть одна и та же.

Какой файл PHP используется для отображения главной страницы?

В чем отличие между index.php, home.php и front-page.php?

Уверен, что этот вопрос терзает многих, как когда-то терзал меня, особенно, если вы начали своё обучение WordPress не с теории, а с практики (я имею ввиду разбор и доработка уже готовых тем). Дело в том, что в таких темах может присутствовать либо home.php, либо front-page.php, либо вообще ни того и ни другого файла, index.php же присутствует всегда.

Разберем сам порядок. Сначала на схеме:

какой файл шаблона используется для отображения главной страницы

Комментирую — итак, когда мы находимся на главной странице, в первую очередь WordPress пытается подключить файл front-page.php, если же файла не существует, вторым шагом он проверяет, что указано в настройках Настройки > Чтение, короче говоря:

  • если на главной странице отображаются последние записи блога, тогда сначала ищется и подключается файл home.php, в случае его отсутствия — index.php,
  • если на главной отображается статическая страница, то применяются обычные правила для страниц (которые вы видели еще на первой схеме в начале поста).

Но файл front-page.php в любом случае остаётся в приоритете!

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 5

Комментирование этого поста более не доступно.
  • Владимир 6 февраля 2016 #

    Спасибо за статью. Все стало ясно. Как новичок, не мог понять разницу между home страницей и front-page. Теперь все стало на места.

  • Дмитрий 9 ноября 2016 #

    Интересует вообще необходимость archive.php.

    У меня для кастомного типа записи (name2) есть стандартный набор файлов: page-name1, single-name2, content-name2, archive-name2.
    В page-name1 прописано оформление новой страницы и цикл вывода записей.
    В файле архива тоже есть структура с циклом по аналогии с базовым файлов archive.php.
    Зачем и там и там делать циклы не догоняю.

    Зачем нужен файл архива?
    Если его удалить, то ничего не меняется на сайте.
    Мне кажется в моем случае он или не используется или где-то у меня что-то не так организовано в структуре файлов.

    • Миша 10 ноября 2016 #

      Если ничего не меняется, удаляйте.

  • Михаил 11 марта 2020 #

    "Этот пост должен раз и навсегда ответить на вопрос — какой из PHP-файлов темы используется для отображения той или иной страницы сайта?"
    -------------
    Этот пост вообще очень мало, что разъясняет.
    Всё очень кратко и путано, в основном про главную страницу.
    Про шаблоны страниц - ничего не сказано, про архивы тоже.

    • Миша 12 марта 2020 #

      Мне очень жаль, что этот материал недостаточно легкий для Вас.

      Кстати, если вы видите, что слово выделено синим – это значит гиперссылка, а точнее переход к другой странице, где более подробно написано о том, что выделено синим цветом. Например, если кликнуть на синий текст "шаблоны страниц", то ваш компьютер автоматически перенаправит вас на другую страницу, на которой будет подробнее как раз про шаблоны страниц.

      Если будут ещё вопросы, не стесняйтесь, задавайте в комментариях. К сожалению при написании постов я не могу учесть навыки и технические уровни всех людей, которые читают мой сайт, поэтому ориентируюсь на большинство. Но когда у кого-то трудности, стараюсь помогать в комментариях.