WordPress структура файлов php

Иерархия файлов темы (шаблона)

В этом посте речь пойдет о том, какие бывают названия у файлов темы WordPress и за показ какой страницы на сайте отвечает каждый из них. Это очень важные, нужные, и в тоже время очень простые, для понимания, знания. Ими должен обладать каждый, кто работает с WordPress. Ниже полностью расписана структура файлов темы WordPress и порядок их подключения (иерархия). Об иерархии файлов темы я упоминал в статье «Условные теги в WordPress». А ниже тоже самое, только описано подругому (надеюсь более понятно).

  • Пример того как работает иерархия
  • Другие файлы темы
  • Типы страниц и названия файлов
  • Записи
  • Страница (запись page)
  • Запись (запись post)
  • Произвольный тип записи
  • Вложение
  • Архивы
  • Рубрика
  • Метка
  • Таксономия
  • Страница архива типа записи
  • Страница автора
  • Страница архива по дате (день, месяц, год)
  • 404 страница
  • Страница поиска
  • Главная страница
  • Страница блога
  • Встраивания (embeds)
  • Как это работает в коде ядра
  • Фильтры

Пример того как работает иерархия

Например, мы заходим на страницу рубрики «Моя рубрика» http://example.com/category/my-category . my-category здесь — это ярлык этой рубрики. И ID этой рубрики 25 .

Читайте также:  Java примеры обработка исключений

Тогда за шаблон этой страницы WordPress будет отвечать один из файлов ниже (файлы проверяются по-очереди, первый существующий в теме файл станет шаблоном этой страницы):

  1. category-my-category.php
  2. category-25.php
  3. category.php
  4. archive.php
  5. index.php

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

Другие файлы темы

Также, в WordPress есть общепринятые подключаемые файлы. Он не участвуют в иерархии, а просто подключаются вручную там где нужно. Например файл sidebar.php подключается в файле шаблона темы с помощью функции get_sidebar().

Список таких «подключаемых» файлов:

  • functions.php — всегда подключается автоматически при загрузке темы.
  • header.php — get_header()
  • sidebar.php — get_sidebar()
  • footer.php — get_footer()
  • searchform.php — get_search_form()

Типы страниц и названия файлов

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

Полная схема для всех видов страниц и подходящих для них файлов выглядит так:

Теперь, я распишу эту картинку, сделаю из неё список страниц сайта и подходящие для них php файлы темы.

Файлы из списка ниже должны находится в папке темы.

Записи

Страница (запись page)

Запись (запись post)

  • single-post-.php
  • single-post.php
  • single.php
  • singular.php
  • index.php

Произвольный тип записи

  • .php (для древовидного типа с поддержкой шаблонов. С WP 4.7)
  • single—.php
  • single—.php
  • single-.php
  • single.php
  • singular.php
  • index.php

Вложение

  • .php
  • .php
  • -.php
  • attachment.php
  • single-attachment-.php (позволяет указать шаблон для отдельной картинки)
  • single-attachment.php (тоже что и attachment.php)
  • single.php
  • singular.php
  • index.php

Под началом и концом MIME типа, имеется виду первая и последняя часть MIME типа, разделенная / . Например, MIME-тип текстового файла: ‘text/plain’ и значит будет проверяться наличие файл text.php , затем plain.php , затем text-plain.php .

Полный список MIME типов смотрите в описании get_allowed_mime_types().

Архивы

Рубрика

  • category-.php
  • category-.php
  • category.php
  • archive.php
  • paged.php (если страница пагинации)
  • index.php

Метка

  • tag-.php
  • tag-.php
  • tag.php
  • archive.php
  • paged.php (если страница пагинации)
  • index.php

Таксономия

  • taxonomy—.php
  • taxonomy-.php
  • taxonomy.php
  • archive.php
  • paged.php (если страница пагинации)
  • index.php

Страница архива типа записи

Страница автора

  • author-.php
  • author-.php
  • author.php
  • archive.php
  • paged.php (если страница пагинации)
  • index.php

Страница архива по дате (день, месяц, год)

404 страница

Страница поиска

Главная страница

  • front-page.php
  • Логика постоянных страниц, когда для главной выбрана страница в настройках.
  • home.php
  • index.php

Страница блога

Страница блога появляется, когда для главной выбрана постоянная страница

Встраивания (embeds)

Шаблоны встраивания используются когда запрашивается короткая версия статьи для добавления её на другом сайте. Обычно такие URL выглядят так: http://dom/post-url/embed Встраивания появились в версии 4.5 и позволяют встраивать ваши записи в чужие сайты. См. get_post_embed_url()

Чтобы изменить только контент встраивания, можно в теме создать файл embed-content.php и описать там HTML. Оригинальный HTML находится в файле движка /wp-includes/theme-compat/embed-content.php

Как это работает в коде ядра

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

Прежде всего. template-loader.php подключается после того как загрузится вся среда WordPress. После того, как отработает файл wp-load.php и обработается основной запрос — функция wp(). Т.е. template-loader.php подключается в самом-самом конце PHP скрипта.

Сначала срабатывает хук template_redirect. В этом хуке можно произвести какие-то проверки и если надо перенаправить на другой URL. В нем нужно обрывать работу скрипта через die() . Т.е. если этот хук что-то меняет, то на этом работа файла template-loader.php должна закончиться и мы «улетаем» на какую-то другую страницу.

Дальше срабатывает никому не интересный хук exit_on_http_head. Он позволяет сделать так, чтобы при HTTP HEAD запросе что-либо выводилось на экран.

Дальше идут проверки по всем условным тегам где выясняется какой файл шаблона подходит под текущий запрос. Проверяется условный тег, затем еще один и еще. Как только один из условных тегов сработал, вызывается соответствующая функция, которая находит подходящий файл шаблона и возвращает путь до него. Все такие функции описаны в get_query_template().

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

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

Фильтры

Иерархию файлов можно изменить через динамические фильтры:

  • (type)_template_hierarchy — фильтрует массив названий файлов иерархии, по которому будет идти поиск нужного файла. С WP 4.7.
  • (type)_template — фильтрует путь до уже определившегося файла шаблона.

Все варианты параметра type смотрите в одноименном параметр $type функции get_query_template(). Вот они:

  • index
  • 404
  • archive
  • post_type_archive
  • author
  • category
  • tag
  • taxonomy
  • date
  • home
  • frontpage
  • page
  • paged
  • search
  • single
  • singular
  • attachment
  • comments_popup

Пример использования такого фильтра смотрите в ответе на этот вопрос.

Источник

Иерархия шаблонов

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

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

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

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

Что в видеоуроке?

В этом уроке мы с вами приступим к натяжке других шаблонов вёрстки на нашу тему WordPress.

Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.

верстка шаблона страницы поста на блоге

верстка страницы ошибки 404

Страница категорий (рубрики на блоге)

верстка шаблона рубрики блога

«Статическая» страница блога:

верстка статической страницы WordPress

Типо тоже обычная страница, но не совсем – потому что содержит форму:

шаблон страницы с формой

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

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

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

if( is_single() ) { // делаем что-то для страницы записи }

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

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

Структура файлов (схема подключения)

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

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

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

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

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

Пример для рубрик

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

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

Шаблон главной страницы WordPress

В чем отличие между 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 в любом случае остаётся в приоритете!

  • 21 видеоурок
  • Можно скачать готовый код после каждого урока
  • Можно начать проходить курс сразу же после оплаты
  • Достаточно базовых знаний HTML и CSS, чтобы пройти курс
  • Единоразовый платёж
  • Доступ навсегда
  • Уроки актуальны в 2023-м году

Источник

Оцените статью