Блог на отдельной странице WordPress: настройка и шаблон
← Блог
WordPress · 03.10.2026 · 4 мин чтения

Блог на отдельной странице WordPress: настройка и шаблон

Чтобы вынести блог на отдельную страницу WordPress, создай страницу «Блог» и назначь её страницей записей в настройках чтения. Главная при этом может остаться страницей компании или портфолио.

Для настройки плагин не нужен. Ниже — действия в админке и пример home.php для классической темы. Он выводит записи и постраничную навигацию.

1. Как назначить страницу записей в WordPress

  1. Создай две пустые страницы, например «Главная» и «Блог». Контент второй страницы выводиться не будет — достаточно заголовка и ярлыка, например blog.
  2. Открой «Настройки → Чтение».
  3. В «На главной странице отображать» выбери «Статическую страницу».
  4. В «Главная страница» выбери «Главная», в «Страница записей» — «Блог». Сохрани.

Теперь записи открываются по адресу /blog/, а постраничная навигация — /blog/page/2/. Количество записей на странице задаётся там же, в «Настройки → Чтение».

2. Как WordPress выбирает шаблон блога

Иерархия шаблонов для этих двух адресов отличается от обычных страниц:

  • Главная: front-page.php → шаблон страницы (свой шаблон, page-{slug}.php, page-{id}.php, page.php) → singular.php → index.php.
  • Страница записей: home.php → index.php.

Для страницы записей WordPress использует home.php или запасной index.php. Файлы page.php, page-blog.php и шаблон, выбранный в редакторе страницы, для неё не применяются.

Если блог был собран в page-blog.php, перенеси нужную разметку в home.php и адаптируй её под основной цикл записей. Одного переименования недостаточно, если шаблон рассчитан на содержимое обычной страницы.

front-page.php имеет приоритет всегда, даже когда на главной выбрана лента записей. Если в теме есть этот файл, а нужна лента, выведи её в нём или удали файл.

3. Вывод записей и пагинации в home.php

В home.php используется основной цикл — записи уже выбраны WordPress, свой WP_Query не нужен:

<?php get_header(); ?>

<main class="blog">
    <?php
    $blog_page_id = (int) get_option( 'page_for_posts' );
    if ( $blog_page_id ) : ?>
        <h1><?php echo esc_html( get_the_title( $blog_page_id ) ); ?></h1>
    <?php endif; ?>

    <?php if ( have_posts() ) : ?>
        <?php while ( have_posts() ) : the_post(); ?>
            <article <?php post_class( 'post-card' ); ?>>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <?php the_excerpt(); ?>
            </article>
        <?php endwhile; ?>

        <?php the_posts_pagination(); ?>
    <?php else : ?>
        <p>Записей пока нет.</p>
    <?php endif; ?>
</main>

<?php get_footer(); ?>

Заголовок блога берётся по ID назначенной страницы. Внутри цикла the_title() выводит заголовок текущей записи.

Количество записей и сортировку меняй через pre_get_posts. Отдельный запрос может нарушить расчёт страниц — подробнее в статье о пагинации WordPress.

4. Разница между is_home() и is_front_page()

Названия условных тегов сбивают с толку:

  • is_front_page() — главная сайта, что бы на ней ни выводилось.
  • is_home() — страница с лентой записей. При статической главной это /blog/, а не главная.

Пример: подсветить пункт «Блог» в меню на странице записей, в рубриках и в самих записях.

function mytheme_is_blog_section() {
    return is_home() || is_singular( 'post' ) || is_category() || is_tag() || is_date() || is_author();
}

Функцию можно использовать в фильтре nav_menu_css_class — как добавлять классы пунктам меню, разобрано в статье о классах меню WordPress.

Не прописывай /blog/ вручную: ярлык страницы могут поменять. Ссылку даёт ID из настроек:

<?php
$blog_page_id = (int) get_option( 'page_for_posts' );
$blog_url     = $blog_page_id ? get_permalink( $blog_page_id ) : home_url( '/' );
?>
<a href="<?php echo esc_url( $blog_url ); ?>">Все статьи</a>

Запасной адрес home_url( '/' ) подходит, когда на главной отображаются последние записи. Если выбрана статическая главная, но страница записей не назначена, сначала задай её в настройках чтения.

Почему страница блога работает неправильно

  • На /blog/ пусто или выводится текст страницы — тема использует page.php, потому что страница записей не выбрана в настройках.
  • Главная показывает ленту, хотя выбрана страница, — в теме есть front-page.php с циклом записей.
  • /blog/page/2/ отдаёт 404 — проверь, хватает ли записей для второй страницы и не заменён ли основной запрос в home.php. Другие причины разобраны в статье о пагинации.
  • У записей адреса вида /blog/slug/ не появились — это отдельная настройка «Постоянных ссылок», страница записей на неё не влияет.

Документация

Есть вопрос или дополнение?

Обсудить в Telegram

Добавить комментарий