Хук post_limits
в WordPress позволяет изменять ограничение LIMIT
в SQL-запросах, которые генерируются WP_Query
. Он дает возможность управлять количеством записей, извлекаемых из базы данных, что полезно для таких страниц, как результаты поиска, RSS-ленты или другие архивы.
apply_filters_ref_array( 'post_limits', string $limits, WP_Query $query );
Параметры
$limits
(string): Часть SQL-запроса, определяющаяLIMIT
— максимальное количество записей для извлечения, например,'LIMIT 0, 10'
.$query
(WP_Query): ОбъектWP_Query
, представляющий текущий запрос.
Применение
Этот хук полезен для ограничения количества записей на определенных страницах или в запросах. При использовании post_limits
следует учитывать влияние на пагинацию. Например, установка жесткого LIMIT
значения может отключить пагинацию, если не учитывать настройку posts_per_page
для стандартных страниц с постами.
Пример 1: Ограничение количества записей в результатах поиска
В этом примере настраивается количество записей, отображаемых на странице поиска. Используется фильтрация только для фронтенда и только для основного поискового запроса, чтобы не затронуть другие SQL-запросы.
add_filter( 'post_limits', 'custom_search_results_limit', 10, 2 );
function custom_search_results_limit( $limits, $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
return 'LIMIT 0, 20'; // Устанавливаем лимит на 20 записей в результатах поиска
}
return $limits;
}
Пример 2: Изменение количества записей в RSS-ленте
Для RSS-лент обычно можно настроить количество записей в административной панели, но если требуется сделать это программно, можно использовать следующий код. Этот пример устанавливает 15 записей для RSS-ленты.
add_filter( 'post_limits', 'custom_feed_post_limit', 10, 2 );
function custom_feed_post_limit( $limits, $query ) {
if ( $query->is_feed() ) {
return 'LIMIT 0, 15'; // Ограничиваем вывод ленты 15 постами
}
return $limits;
}
Пример 3: Удаление ограничения LIMIT
для конкретного запроса
Чтобы запрос выводил все доступные записи без ограничения, можно вернуть NULL
, что уберет LIMIT
из SQL-запроса. Это может быть полезно для загрузки всех записей в определенных сценариях.
add_filter( 'post_limits', 'remove_post_limit_for_specific_query', 10, 2 );
function remove_post_limit_for_specific_query( $limits, $query ) {
if ( $query->is_main_query() && is_page_template( 'template-full-list.php' ) ) {
return NULL; // Убираем LIMIT, чтобы показать все записи на шаблоне `template-full-list.php`
}
return $limits;
}
Пример 4: Ограничение количества записей на главной странице сайта
Этот пример устанавливает ограничение на количество записей на главной странице, отображая не более 10 записей. Если требуется изменять количество записей для главной страницы, это можно сделать с помощью фильтрации основного запроса.
add_filter( 'post_limits', 'limit_posts_on_homepage', 10, 2 );
function limit_posts_on_homepage( $limits, $query ) {
if ( $query->is_main_query() && $query->is_home() ) {
return 'LIMIT 0, 10'; // Показываем максимум 10 записей на главной странице
}
return $limits;
}
Пример 5: Показ всех записей категории, исключая LIMIT
Иногда нужно показать все записи из определенной категории без ограничения. Используя условие категории и фильтр post_limits
, можно убрать лимит.
add_filter( 'post_limits', 'show_all_posts_in_category', 10, 2 );
function show_all_posts_in_category( $limits, $query ) {
if ( $query->is_main_query() && is_category( 'special-category' ) ) {
return NULL; // Убираем LIMIT для всех постов в категории `special-category`
}
return $limits;
}
Заключение
Хук post_limits
предоставляет гибкие возможности для настройки SQL-запросов, позволяя ограничивать или полностью убирать ограничение количества записей.