Создание удобного и функционального фильтра товаров — важная задача для любого интернет-магазина на WordPress. В этой статье мы разберём, как сделать уникальный фильтр товаров, который поможет вашим покупателям быстро находить нужные продукты, улучшит пользовательский опыт и повысит конверсию.
Почему стандартные фильтры WooCommerce не всегда подходят
WooCommerce, как самый популярный плагин для интернет-магазинов на WordPress, предоставляет базовые фильтры по цене, категориям и атрибутам. Однако стандартные инструменты часто ограничены в возможностях кастомизации и не всегда соответствуют специфике вашего бизнеса.
Например, если вы продаёте билеты (что может быть актуально для сайта wpticket.ru), вам может понадобиться фильтр по дате события, месту проведения, типу билета и другим параметрам, которых нет в стандартном наборе.
В таких случаях стоит задуматься о создании собственного фильтра или использовании плагинов с расширенными возможностями.
Обзор популярных плагинов для расширенных фильтров
1. FacetWP
FacetWP — мощный плагин для создания фильтров на основе пользовательских полей, таксономий и метаданных. Он легко интегрируется с WooCommerce и позволяет создавать фильтры по любым параметрам.
Преимущества:
- Быстрая AJAX-подгрузка результатов без перезагрузки страницы.
- Поддержка фильтров по диапазону, чекбоксов, выпадающих списков и др.
- Простая настройка и гибкая кастомизация.
Недостаток — платный плагин, но для профессиональных проектов он себя оправдывает.
2. WOOF – Products Filter for WooCommerce
WOOF — бесплатный плагин с возможностью расширения через дополнения. Поддерживает фильтрацию по таксономиям, атрибутам, цене и пользовательским полям.
Подходит для тех, кто хочет получить функциональный фильтр без больших затрат.
Создание собственного уникального фильтра товаров на WordPress
Если вы хотите максимально контролировать функциональность и внешний вид фильтра, можно сделать собственное решение. Ниже я приведу пример создания простого фильтра по пользовательскому полю "Место проведения" для товаров WooCommerce.
Шаг 1. Добавляем пользовательское поле к товару
Для начала добавим метаполе для товаров в админке. Для этого используем хук add_action('woocommerce_product_options_general_product_data', 'wpticket_add_custom_field');:
function wpticket_add_custom_field() {
woocommerce_wp_text_input(
array(
'id' => '_wpticket_event_location',
'label' => __('Место проведения события', 'wpticket'),
'desc_tip' => true,
'description' => __('Введите место проведения события для этого товара.', 'wpticket')
)
);
}
add_action('woocommerce_product_options_general_product_data', 'wpticket_add_custom_field');После добавления поля нужно сохранить его значение:
function wpticket_save_custom_field($post_id) {
$location = isset($_POST['_wpticket_event_location']) ? sanitize_text_field($_POST['_wpticket_event_location']) : '';
update_post_meta($post_id, '_wpticket_event_location', $location);
}
add_action('woocommerce_process_product_meta', 'wpticket_save_custom_field');Шаг 2. Выводим фильтр на страницу каталога
Создадим форму фильтра с выпадающим списком уникальных мест проведения, собранных из всех товаров:
function wpticket_display_location_filter() {
global $wpdb;
$locations = $wpdb->get_col("SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_wpticket_event_location' AND meta_value != ''");
if (empty($locations)) return;
echo '<form method="GET" id="wpticket-location-filter">';
echo '<select name="wpticket_location" onchange="this.form.submit()">';
echo '<option value="">Выберите место проведения</option>';
foreach ($locations as $location) {
$selected = (isset($_GET['wpticket_location']) && $_GET['wpticket_location'] === $location) ? 'selected' : '';
echo "<option value=\"$location\" $selected>" . esc_html($location) . "</option>";
}
echo '</select>';
echo '</form>';
}
add_action('woocommerce_before_shop_loop', 'wpticket_display_location_filter', 20);Шаг 3. Фильтруем товары по выбранному месту
Добавим фильтр к основному запросу каталога, чтобы показывать товары с нужным местом проведения:
function wpticket_filter_products_by_location($query) {
if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag())) {
if (!empty($_GET['wpticket_location'])) {
$meta_query = array(
array(
'key' => '_wpticket_event_location',
'value' => sanitize_text_field($_GET['wpticket_location']),
'compare' => '='
)
);
$query->set('meta_query', $meta_query);
}
}
}
add_action('pre_get_posts', 'wpticket_filter_products_by_location');Дополнительные советы по созданию фильтров
Оптимизация запросов
При большом количестве товаров и уникальных значений пользовательских полей фильтры могут замедлять сайт. Чтобы избежать этого, стоит использовать кэширование и по возможности создавать отдельные таксономии для часто используемых фильтров.
AJAX-подгрузка результатов
Для повышения удобства пользователей реализуйте фильтрацию без перезагрузки страницы с помощью AJAX. Это требует написания JavaScript-кода и использования WordPress AJAX API.
Использование пользовательских таксономий
Иногда удобнее создавать собственные таксономии (например, "Место проведения"), что позволит использовать стандартные инструменты WordPress для фильтрации и архивирования.
Заключение
Создание уникального фильтра товаров — задача, требующая понимания структуры данных вашего магазина и особенностей клиентской аудитории. Использование плагинов облегчит работу, но собственное решение даёт максимальную гибкость. Приведённый пример показывает основные шаги для реализации фильтра по пользовательскому полю, который можно адаптировать под любые нужды.