Описание pre_get_posts
— Action
Хук pre_get_posts позволяет изменять параметры запросов к базе данных перед их выполнением в WordPress. Он срабатывает на этапе, когда запросы к записям, страницам или кастомным типам записей уже сформированы, но еще не выполнены, что дает возможность изменить их перед получением данных
Примеры использования
Пример изменения количества записей на странице:
add_action('pre_get_posts', function($query) {
if ($query->is_main_query() && !is_admin()) {
$query->set('posts_per_page', 5);
}
});
В этом примере мы изменяем количество записей, выводимых на главной странице, на 5
Пример фильтрации записей по категории:
add_action('pre_get_posts', function($query) {
if ($query->is_main_query() && !is_admin() && is_home()) {
$query->set('category_name', 'news');
}
});
Здесь мы фильтруем записи на главной странице, чтобы выводились только записи из категории ‘news’
Пример изменения порядка вывода записей:
add_action('pre_get_posts', function($query) {
if ($query->is_main_query() && !is_admin()) {
$query->set('orderby', 'title');
$query->set('order', 'ASC');
}
});
В этом примере мы меняем порядок вывода записей на сортировку по заголовку в восходящем порядке
Пример изменения типа записей на кастомный тип:
add_action('pre_get_posts', function($query) {
if ($query->is_main_query() && is_post_type_archive('product')) {
$query->set('post_type', 'product');
}
});
Здесь мы изменяем тип записей для архива кастомного типа ‘product’
— Лучшие практики
– Использование
Используйте этот хук, когда нужно изменить параметры запросов к базе данных, например, для настройки вывода записей на страницах
– Производительность
Хук не должен значительно влиять на производительность, если использовать его разумно
– Предупреждения
Убедитесь, что изменения не конфликтуют с другими плагинами или темами, использующими аналогичные запросы
Альтернативы
Тип: action
Этот хук позволяет изменять параметры запросов к базе данных на разных этапах выполнения
Используйте его для настройки выводимых данных в зависимости от контекста, например, при работе с пользовательскими полями