Плагин YITH WooCommerce Wishlist — один из самых популярных инструментов для добавления функционала списка желаемого (wishlist) в интернет-магазинах на WooCommerce. В стандартном виде он хорошо работает, но часто возникает необходимость расширить функционал, добавив собственные критерии фильтрации товаров в списке желаемого. В этой статье разберём, как с помощью фильтров плагина добавить кастомные критерии и улучшить взаимодействие пользователей с wishlist.
Что такое фильтры в YITH WooCommerce Wishlist и зачем они нужны
Фильтры — это специальные хуки WordPress, позволяющие изменить данные до их вывода или сохранения. В YITH WooCommerce Wishlist есть фильтры, которые дают возможность вмешиваться в логику отображения, сортировки и обработки списка желаемого.
Например, можно отфильтровать товары, показываемые в wishlist, добавив условие по категории, по произвольному полю или по пользовательскому методу оценки. Это помогает адаптировать стандартный функционал под задачи конкретного магазина.
Важно: чтобы работать с фильтрами, нужно иметь базовые знания PHP и понимать структуру WordPress и WooCommerce.
Основные фильтры YITH WooCommerce Wishlist для кастомизации
Рассмотрим несколько ключевых фильтров, которые пригодятся для добавления собственных критериев:
yith_wcwl_products_query— позволяет изменить параметры запроса товаров для wishlist.yith_wcwl_wishlist_items— фильтрует массив товаров, которые отображаются в списке желаемого.yith_wcwl_get_items_count— фильтр для изменения количества товаров в wishlist.
С их помощью можно добавлять сложную логику сортировки, скрывать товары, не соответствующие определённым условиям или модифицировать количество отображаемых позиций.
Пример: добавляем фильтр по произвольному полю товара в wishlist
Допустим, у вас есть произвольное поле товара _custom_rating, в котором хранится числовой рейтинг товара. Нужно отображать в wishlist только товары с рейтингом выше 3.
Для этого используем фильтр yith_wcwl_products_query и добавим условие meta_query:
add_filter('yith_wcwl_products_query', 'wpbloger_filter_wishlist_by_custom_rating', 10, 2);
function wpbloger_filter_wishlist_by_custom_rating($args, $wishlist) {
if (!isset($args['meta_query'])) {
$args['meta_query'] = [];
}
$args['meta_query'][] = [
'key' => '_custom_rating',
'value' => 3,
'compare' => '>',
'type' => 'NUMERIC'
];
return $args;
}Этот код добавляет к запросу товаров wishlist условие, которое отбирает только те товары, у которых значение поля _custom_rating больше 3.
Добавление пользовательской сортировки по кастомным критериям
Иногда нужно не просто фильтровать товары, а сортировать их по своим правилам. Например, по тому же рейтингу из предыдущего примера.
Для этого в том же фильтре yith_wcwl_products_query можно добавить параметры сортировки:
add_filter('yith_wcwl_products_query', 'wpbloger_sort_wishlist_by_custom_rating', 20, 2);
function wpbloger_sort_wishlist_by_custom_rating($args, $wishlist) {
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = '_custom_rating';
$args['order'] = 'DESC';
return $args;
}Так товары в wishlist будут отображаться в порядке убывания рейтинга.
Как добавить свой фильтр выбора товаров в интерфейс wishlist
Чтобы пользователи могли фильтровать wishlist по своим критериям, нужно добавить на страницу интерфейс с селекторами и обработать их выбор в коде.
Пример: добавим выпадающий список для фильтрации по цвету товара, который хранится в атрибуте pa_color.
1. Добавим HTML селектор:
function wpbloger_add_color_filter_to_wishlist() {
$colors = get_terms('pa_color');
if ($colors && !is_wp_error($colors)) {
echo '<form method="GET" id="wpbloger_wishlist_filter">';
echo '<select name="wpbloger_color_filter" onchange="this.form.submit()">';
echo '<option value="">Все цвета</option>';
foreach ($colors as $color) {
$selected = isset($_GET['wpbloger_color_filter']) && $_GET['wpbloger_color_filter'] === $color->slug ? 'selected' : '';
echo "<option value='{$color->slug}' {$selected}>{$color->name}</option>";
}
echo '</select>';
echo '</form>';
}
}
add_action('yith_wcwl_before_wishlist', 'wpbloger_add_color_filter_to_wishlist');2. Обработаем фильтрацию товаров по выбранному цвету:
add_filter('yith_wcwl_products_query', 'wpbloger_filter_wishlist_by_color', 15, 2);
function wpbloger_filter_wishlist_by_color($args, $wishlist) {
if (!empty($_GET['wpbloger_color_filter'])) {
$args['tax_query'][] = [
'taxonomy' => 'pa_color',
'field' => 'slug',
'terms' => sanitize_text_field($_GET['wpbloger_color_filter']),
];
}
return $args;
}Теперь на странице wishlist появится селектор цвета, и при выборе будет обновляться список товаров только с выбранным цветом.
Советы по работе с фильтрами YITH WooCommerce Wishlist
1. Для отладки фильтров удобно выводить параметры запроса или логи в файл, чтобы понимать, как меняется массив аргументов.
2. Всегда проверяйте, что пользовательские данные (например, из GET) проходят санитизацию.
3. Не забывайте о производительности: сложные meta_query и tax_query могут замедлять загрузку страницы, особенно при большом количестве товаров.
4. Если нужно много кастомных изменений, рассмотрите возможность создания дочернего плагина, чтобы не потерять изменения при обновлении YITH WooCommerce Wishlist.
Полезные плагины для расширения функционала wishlist
Для расширения возможностей wishlist можно использовать дополнительные плагины:
- YITH WooCommerce Wishlist — основной плагин.
- Clearfy Pro — оптимизация и расширение возможностей WooCommerce и WordPress.
- WPRemark — расширенные отзывы и рейтинги, которые можно интегрировать с wishlist.
Выводы
Фильтры YITH WooCommerce Wishlist дают мощные возможности для адаптации списка желаемого под любые задачи. С помощью простых PHP-фильтров можно реализовать собственные критерии отбора и сортировки товаров, а также расширить интерфейс фильтрации для пользователей. Это повышает удобство магазина и помогает лучше удовлетворять потребности покупателей.