Диагностика проблемы: почему сортировка по новизне не работает в Elementor
По умолчанию стандартный виджет WooCommerce Products в Elementor позволяет выбрать сортировку товаров, но часто пользователи сталкиваются с тем, что сортировка по дате добавления (новизне) не работает или не отображает свежие товары первыми. Это связано с тем, что WooCommerce использует сложный механизм сортировки, где дата публикации поста (товара) и дата изменения могут конфликтовать, а Elementor не всегда правильно передает параметры запроса.
Проверить проблему можно так:
- Откройте страницу с виджетом WooCommerce Products, установите сортировку по «новизне»;
- Обновите страницу на фронтенде и посмотрите порядок товаров;
- Если самые свежие товары не отображаются первыми, значит сортировка не сработала.
Как реализовать корректную сортировку товаров по дате добавления в Elementor
Способ 1: использовать кастомный код с фильтром pre_get_posts
Для того чтобы точно отсортировать товары по дате публикации в WooCommerce через Elementor, добавьте следующий код в файл functions.php вашей темы или в плагин для кастомных функций:
add_action('pre_get_posts', function($query) {
if (!is_admin() && $query->is_main_query() &&
(isset($query->query_vars['post_type']) && $query->query_vars['post_type'] === 'product') &&
isset($_GET['sort']) && $_GET['sort'] === 'newest') {
$query->set('orderby', 'date');
$query->set('order', 'DESC');
}
});
Далее в Elementor в виджете продуктов добавьте класс или атрибут, который передает параметр sort=newest в URL, либо используйте ссылку с таким параметром для отображения сортировки по дате.
Способ 2: использовать альтернативный виджет с поддержкой сортировки
Если вы не хотите писать код, можно использовать плагин Advanced Woo Search или WooCommerce Product Table, которые корректно обрабатывают сортировку по дате через шорткоды и виджеты, которые можно вставить в Elementor с помощью HTML или Shortcode.
Проверка результата после внедрения
- Обновите страницу с каталогом товаров;
- Если используете первый способ, добавьте в URL параметр
?sort=newestи проверьте, что первые товары — самые свежие; - Если используете второй способ — убедитесь, что выбран параметр сортировки «по дате» и товары выводятся в нужном порядке.
Частые ошибки и как их исправить
- Кэширование: Если после изменений сортировка не обновляется, очистите кэш сайта и браузера. Используйте Clearfy Pro для очистки кэша и оптимизации сайта.
- Неправильный тип запроса: Код не срабатывает, если в запросе не установлен
post_type=product. Проверьте, что виджет в Elementor действительно выводит товары WooCommerce. - Конфликты с плагинами: Некоторые плагины могут менять параметры запросов WooCommerce. Временно отключите сторонние плагины для диагностики.
- Отсутствие новых товаров с правильной датой: Убедитесь, что у товаров корректно установлена дата публикации, а не только дата изменения.
Практические советы по производительности и безопасности
- Используйте
pre_get_postsтолько с конкретными проверками, чтобы не влиять на все запросы. - Для больших каталогов товаров рекомендуется включить индексацию дат и использовать кеширование запросов WooCommerce.
- Избегайте прямых изменений в ядре WooCommerce, все кастомизации делайте через хуки и фильтры.
- Для безопасности проверьте, что ваш код не принимает пользовательские данные без валидации.
- Для удобства пользователей добавьте на страницу каталога фильтр сортировки с выбором «новизна», который будет добавлять параметр
sort=newestв URL.
Сравнение способов сортировки товаров по новизне
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| Код с pre_get_posts | Гибкий, без сторонних плагинов, контролируемый | Требует навыков кодирования, возможно конфликтует с другими плагинами | См. код выше |
| Плагины (Advanced Woo Search и др.) | Простая настройка, поддержка сортировок, удобный UI | Дополнительная нагрузка на сайт, зависимость от плагина | Шорткоды или виджеты плагина в Elementor |