В стандартной установке WordPress количество постов, выводимых на страницах блога, категориях, тегах и архивах, задаётся в настройках «Чтение» в админ-панели. Однако часто возникает необходимость изменить это число программно, чтобы обеспечить гибкость и точный контроль над выводом контента. В этой статье мы рассмотрим, как изменить количество постов в различных выводах WordPress без использования плагинов, с примерами кода и практическими советами.
Зачем менять количество постов в выводах WordPress?
Изменение количества постов на странице может быть необходимо для разных целей:
- Улучшение пользовательского опыта за счёт оптимального объёма контента на странице.
- Оптимизация скорости загрузки страниц — меньше постов значит быстрее загрузка.
- Адаптация под дизайн сайта и макеты, где нужно показывать строго определённое число записей.
- Различные требования к страницам архива, категориям, поисковым результатам.
Хотя в настройках WordPress можно задать общее количество постов для блога, изменить количество для отдельных типов страниц удобнее именно через код.
Использование хука pre_get_posts для изменения количества постов
Основной способ программного изменения количества постов — это использование хука pre_get_posts. Он позволяет модифицировать основной запрос WordPress перед его выполнением.
Рассмотрим пример функции, меняющей количество постов для главной страницы блога:
function wpzoom_change_posts_per_page_main( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_home() ) {
$query->set( 'posts_per_page', 5 ); // Выводить 5 постов на главной
}
}
add_action( 'pre_get_posts', 'wpzoom_change_posts_per_page_main' );Этот код нужно добавить в файл functions.php вашей темы или в собственный плагин.
Объяснение:
!is_admin()— чтобы изменения применялись только на фронтенде, а не в админке.$query->is_main_query()— чтобы изменить только главный запрос, а не дополнительные WP_Query.$query->is_home()— условие для главной страницы блога.
Изменение количества постов на страницах категорий и тегов
Точно так же можно изменить количество постов для архивов категорий или тегов:
function wpzoom_change_posts_per_page_taxonomies( $query ) {
if ( !is_admin() && $query->is_main_query() && ( $query->is_category() || $query->is_tag() ) ) {
$query->set( 'posts_per_page', 10 ); // 10 постов на категориях и тегах
}
}
add_action( 'pre_get_posts', 'wpzoom_change_posts_per_page_taxonomies' );Таким образом вы гибко настраиваете число постов для разных архивов.
Изменение количества постов на странице поиска
Для страницы результатов поиска:
function wpzoom_change_posts_per_page_search( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
$query->set( 'posts_per_page', 7 ); // 7 постов на странице поиска
}
}
add_action( 'pre_get_posts', 'wpzoom_change_posts_per_page_search' );Изменение количества постов для пользовательских типов записей
Если на сайте используются кастомные типы записей (Custom Post Types), количество постов для их архивов можно задать так:
function wpzoom_change_posts_per_page_cpt( $query ) {
if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'your_cpt' ) ) {
$query->set( 'posts_per_page', 8 ); // 8 постов на архиве CPT 'your_cpt'
}
}
add_action( 'pre_get_posts', 'wpzoom_change_posts_per_page_cpt' );Замените your_cpt на слаг вашего типа записей.
Динамическое управление количеством постов через шорткод
Иногда полезно предоставить возможность выводить посты с разным количеством через шорткод. Вот пример шорткода, который выводит последние записи с заданным количеством:
function wpzoom_posts_list_shortcode( $atts ) {
$atts = shortcode_atts( array(
'count' => 5,
), $atts, 'wpzoom_posts' );
$args = array(
'posts_per_page' => intval( $atts['count'] ),
'post_status' => 'publish',
);
$query = new WP_Query( $args );
$output = '<ul>';
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
} else {
$output .= '<li>Посты не найдены.</li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode( 'wpzoom_posts', 'wpzoom_posts_list_shortcode' );Используйте шорткод [wpzoom_posts count="3"] для вывода 3 последних постов.
Рекомендации и лучшие практики
Изменяя количество постов программно, учитывайте следующие моменты:
- Всегда проверяйте, что изменения применяются только к нужным запросам, чтобы избежать неожиданных багов.
- Для сложных сайтов с большим количеством запросов лучше использовать условные теги и логику, чтобы не замедлять загрузку.
- Если на сайте есть пагинация, убедитесь, что изменение количества постов не ломает её.
- Для интеграции с плагинами кеширования учитывайте необходимость очистки кеша после внесения изменений.
Использование плагина Clearfy для управления выводом постов
Если вы всё же хотите использовать плагин, обратите внимание на Clearfy — многофункциональный плагин для оптимизации и настройки WordPress. В нём есть инструменты для тонкой настройки вывода контента, включая посты, и другие полезные функции для ускорения сайта.
Однако программный подход предоставляет гибкость и не требует установки лишних плагинов.
Выводы
Изменение количества постов в выводах WordPress — задача, с которой сталкивается почти каждый разработчик. Использование хука pre_get_posts — надёжный и эффективный способ контролировать количество постов на любых страницах сайта. Кроме того, вы можете создавать свои шорткоды для динамического вывода с нужным числом записей. Это позволяет сделать сайт более адаптивным и удобным для пользователей.