Как изменить вывод публикаций в WordPress без изменения шаблона

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

Почему не стоит менять шаблон напрямую

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

  • При обновлении темы все изменения будут потеряны.
  • Сложность поддержки и поиска ошибок.
  • Риск поломать сайт из-за неправильных изменений.

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

Использование фильтра pre_get_posts для изменения запроса публикаций

Фильтр pre_get_posts позволяет изменять параметры основного запроса WordPress до его выполнения. Это мощный инструмент для управления выборкой постов без вмешательства в шаблон.

Рассмотрим пример, когда нужно изменить количество постов на главной странице и изменить порядок сортировки:

function wptemplates_pre_get_posts_modify( $query ) {
    if ( !is_admin() && $query->is_main_query() && is_home() ) {
        // Показывать 5 постов
        $query->set( 'posts_per_page', 5 );
        // Сортировать по дате публикации в обратном порядке
        $query->set( 'order', 'DESC' );
        $query->set( 'orderby', 'date' );
    }
}
add_action( 'pre_get_posts', 'wptemplates_pre_get_posts_modify' );

Этот код можно добавить в файл functions.php вашей дочерней темы или в свой плагин. Он изменит выборку постов на главной странице, не трогая шаблон.

Добавление пользовательских полей и вывод их в списке постов

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

Пример добавления пользовательского поля 'wptemplates_subtitle' под заголовком поста на странице блога:

function wptemplates_add_subtitle_to_content( $content ) {
    if ( is_home() && in_the_loop() && is_main_query() ) {
        $subtitle = get_post_meta( get_the_ID(), 'wptemplates_subtitle', true );
        if ( $subtitle ) {
            $subtitle_html = '<h3 class="post-subtitle">' . esc_html( $subtitle ) . '</h3>';
            $content = $subtitle_html . $content;
        }
    }
    return $content;
}
add_filter( 'the_content', 'wptemplates_add_subtitle_to_content' );

Такой подход позволяет добавить дополнительный текст без изменения шаблонов.

Использование плагинов для кастомизации вывода публикаций

Если вы предпочитаете готовые решения, есть несколько плагинов, которые помогут гибко настраивать вывод постов без кода:

  • Content Views — визуальный конструктор списков постов с фильтрами и пагинацией.
  • Posts Table with Search & Filter — вывод постов в виде таблицы с поиском и фильтрами.
  • Clearfy Pro — оптимизация и расширение возможностей, в том числе по управлению выводом постов.

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

Создадим простой шорткод, который выводит список публикаций с возможностью указать категорию и количество:

function wptemplates_custom_posts_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'category' => '',
        'posts_per_page' => 5,
    ), $atts, 'wptemplates_posts' );

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => intval( $atts['posts_per_page'] ),
    );

    if ( $atts['category'] ) {
        $args['category_name'] = sanitize_text_field( $atts['category'] );
    }

    $query = new WP_Query( $args );
    if ( ! $query->have_posts() ) {
        return '<p>Публикаций не найдено.</p>';
    }

    $output = '<ul class="wptemplates-post-list">';
    while ( $query->have_posts() ) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul>';
    wp_reset_postdata();

    return $output;
}
add_shortcode( 'wptemplates_posts', 'wptemplates_custom_posts_shortcode' );

Использование шорткода на странице:

[wptemplates_posts category="novosti" posts_per_page="3"]

Этот код удобно размещать в плагине или дочерней теме и использовать для быстрого вывода публикаций с нужными параметрами.

Изменение вывода заголовков и метаданных с помощью хуков

Если нужно изменить формат заголовков или метаданных (дата, автор), можно воспользоваться фильтрами the_title и the_date или хуками шаблона, если они предусмотрены. Например, добавим к заголовку приставку «Новинка» для публикаций, опубликованных за последние 7 дней:

function wptemplates_modify_title_new_label( $title, $id = null ) {
    if ( is_admin() ) {
        return $title;
    }
    if ( $id && is_singular() ) {
        $post_date = get_the_date( 'U', $id );
        $week_ago = strtotime( '-7 days' );
        if ( $post_date >= $week_ago ) {
            $title = 'Новинка: ' . $title;
        }
    }
    return $title;
}
add_filter( 'the_title', 'wptemplates_modify_title_new_label', 10, 2 );

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

Вывод кастомных типов записей без правки шаблона

Для кастомных типов записей (Custom Post Types) тоже актуальна задача изменить вывод. Параметр template_include позволяет динамически подменять шаблон, но если хочется обойтись без этого, можно использовать фильтр pre_get_posts для управления выборкой, а для вывода — внедрять через хуки или шорткоды.

Пример изменения количества записей кастомного типа «portfolio» на странице архива:

function wptemplates_portfolio_posts_per_page( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'portfolio' ) ) {
        $query->set( 'posts_per_page', 10 );
        $query->set( 'orderby', 'title' );
        $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'wptemplates_portfolio_posts_per_page' );

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

Заключение

Изменение вывода публикаций в WordPress без правки шаблона — важный навык для разработчиков и администраторов сайтов. Используя фильтры pre_get_posts, the_content, создание шорткодов и плагины, можно добиться нужного результата, сохраняя обновляемость и стабильность сайта. Рекомендуется добавлять подобные изменения в дочернюю тему или создавать собственные плагины, чтобы не потерять работу при обновлениях.

WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
15.07.2026
Как автоматизировать создание копий шаблонов WordPress для кастомизации
28.01.2026
Как добавить автоматическое сохранение в редактор Gutenberg WordPress
23.02.2026
WooCommerce: как автоматически удалять неактивные товары по дате последнего обновления
24.05.2026
Как удалить или заблокировать плагин WordPress, если стандартные методы не работают
24.01.2026