Иерархия шаблонов
У темы может быть один index.php на все случаи, но обычно статья, страница, рубрика и поиск выглядят по-разному. WordPress сам выбирает файл шаблона по типу открытой страницы. Порядок, в котором он ищет файлы, называют иерархией шаблонов.
Основные шаблоны
| Файл | Для чего |
|---|---|
front-page.php | Главная страница сайта |
home.php | Лента записей блога |
single.php | Одна запись |
page.php | Одна страница |
archive.php | Списки: рубрика, метка, автор, дата |
category.php | Список рубрики |
search.php | Результаты поиска |
404.php | Страница не найдена |
index.php | Всё, для чего не нашлось файла |
От частного к общему
WordPress проверяет файлы от самого точного к самому общему и берёт первый существующий. Для рубрики с адресом news и номером 5 порядок такой:
category-news.php → category-5.php → category.php → archive.php → index.phpДля записи типа «книга»:
single-book.php → single.php → singular.php → index.phpПоэтому тему начинают с index.php, а остальные файлы добавляют по мере надобности.
Шаблон для одной страницы
Странице с адресом contacts можно дать собственный файл — page-contacts.php. Он сработает только для неё:
<?php
// page-contacts.php
get_header();
?>
<main class="contacts">
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<p>Телефон: +7 900 000-00-00</p>
</main>
<?php
get_footer();Шаблон на выбор
Шаблон, который редактор выбирает в панели сам, помечают комментарием:
<?php
/**
* Template Name: Страница без боковой колонки
*/
// template-wide.php
get_header();
?>
<main class="wide">
<?php
while (have_posts()) :
the_post();
the_content();
endwhile;
?>
</main>
<?php
get_footer();Он появится в списке «Шаблон» при редактировании страницы.
Страница 404
<?php
// 404.php
get_header();
?>
<main>
<h1>Страница не найдена</h1>
<p>Попробуйте поиск:</p>
<?php get_search_form(); ?>
</main>
<?php
get_footer();Условные функции
Внутри общего шаблона тип страницы проверяют условными функциями:
<?php
// header.php
if (is_front_page()) {
echo '<p class="tagline">' . esc_html(get_bloginfo('description')) . '</p>';
}| Функция | Когда true |
|---|---|
is_front_page() | Главная страница |
is_single() | Одна запись |
is_page('contacts') | Страница, можно указать адрес |
is_category(), is_tag() | Список рубрики или метки |
is_archive() | Любой список |
is_search() | Результаты поиска |
is_404() | Страница не найдена |
is_user_logged_in() | Посетитель вошёл на сайт |
Частая ошибка
front-page.php и home.php легко перепутать. front-page.php — главная страница сайта, что бы на ней ни было. home.php — лента записей, которая может находиться и по адресу /blog. Если в «Настройки → Чтение» главной назначена статическая страница, home.php для неё не сработает. Какой шаблон использован сейчас, показывает плагин Query Monitor.