Описание posts_where
— Filter
Хук posts_where позволяет изменять SQL-запрос, который используется для выборки постов в WordPress. Он срабатывает при формировании запроса к базе данных, позволяя разработчикам добавлять свои условия для фильтрации постов.
Примеры использования
Пример добавления условия для выборки только опубликованных постов:
add_filter('posts_where', function($where) {
global $wpdb;
$where .= ' AND ' . $wpdb->posts . '.post_status = "publish"';
return $where;
});
В этом примере мы добавляем условие, чтобы выбирать только опубликованные посты.
Пример фильтрации постов по кастомному полю:
add_filter('posts_where', function($where, $query) {
if ($query->is_main_query() && is_home()) {
$where .= ' AND meta_key = "featured" AND meta_value = "yes"';
}
return $where;
}, 10, 2);
Здесь мы добавляем условие для выборки постов с кастомным полем ‘featured’ со значением ‘yes’ только на главной странице.
Пример ограничения выборки постов по дате:
add_filter('posts_where', function($where) {
$where .= ' AND post_date >= "2023-01-01 00:00:00"';
return $where;
});
В данном примере мы ограничиваем выборку постов, чтобы получать только те, которые были опубликованы после 1 января 2023 года.
— Лучшие практики
– Использование
Используйте этот хук, когда необходимо изменить условия выборки постов, например, для фильтрации по статусу или кастомным полям
– Производительность
Поскольку хук изменяет SQL-запрос, необходимо следить за тем, чтобы добавляемые условия не приводили к замедлению запроса
– Предупреждения
Обращайте внимание на структуру SQL-запроса, чтобы избежать синтаксических ошибок или конфликтов с другими условиями
Альтернативы
Тип: action
Этот хук позволяет изменять параметры WP_Query перед выполнением запроса, включая сортировку и количество постов
Используйте его, если нужно изменить больше параметров запроса, чем просто условия выборки