Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

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

У темы может быть один 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.