Создание фильтра по атрибутам в WooCommerce без плагинов

WooCommerce предоставляет мощные инструменты для создания интернет-магазина. Часто возникает необходимость в фильтрации товаров по различным атрибутам, таким как цвет, размер или материал; Хотя существует множество плагинов для этой цели, реализация фильтрации без использования плагинов позволяет добиться большей гибкости и контроля над кодом, а также избежать потенциальных конфликтов и снижения производительности.

В этой статье мы рассмотрим, как создать систему фильтрации товаров в WooCommerce, используя встроенные возможности платформы и хуки, предоставляемые WooCommerce. Такой подход требует определенных навыков программирования, но позволяет создать индивидуальное решение, полностью соответствующее вашим потребностям.

Зачем обходиться без плагинов?

Использование плагинов для фильтрации товаров в WooCommerce – это, безусловно, самый быстрый способ получить желаемый функционал. Однако, существуют веские причины, по которым стоит рассмотреть альтернативный подход, основанный на использовании встроенных возможностей WooCommerce и собственном коде.

Во-первых, плагины могут увеличивать нагрузку на сервер, особенно если их установлено много или они плохо оптимизированы. Это может привести к снижению скорости загрузки страниц магазина и ухудшению пользовательского опыта. Во-вторых, плагины могут конфликтовать друг с другом, вызывая ошибки и нестабильную работу сайта. В-третьих, вы зависите от разработчика плагина в плане обновлений и поддержки. Если плагин больше не поддерживается, это может создать проблемы в будущем.

Разработка собственной системы фильтрации позволяет избежать этих проблем. Вы получаете полный контроль над кодом, можете оптимизировать его под свои нужды и быть уверенным в его стабильности и безопасности. Это также дает возможность реализовать уникальные функции фильтрации, которые не доступны в существующих плагинах, и интегрировать их с другими элементами вашего магазина.

Обзор подхода: Использование хуков WooCommerce

WooCommerce предоставляет мощный механизм хуков (hooks), позволяющий разработчикам модифицировать поведение платформы без изменения ее основных файлов. Хуки – это точки в коде WooCommerce, где можно подключить свои функции для выполнения дополнительных действий.

В нашем случае мы будем использовать хуки для перехвата запроса к базе данных, получения товаров, и модификации результатов в соответствии с выбранными пользователем фильтрами. Это позволит нам динамически изменять вывод товаров на странице магазина, не затрагивая основной функционал WooCommerce.

Основная идея заключается в том, чтобы перехватить запрос, который WooCommerce использует для получения товаров, добавить к нему условия фильтрации на основе выбранных атрибутов, и затем вернуть отфильтрованный список товаров. Для этого потребуется знание SQL и понимание структуры базы данных WooCommerce.

Мы также будем использовать хуки для добавления пользовательских полей атрибутов, создания формы фильтрации и отображения результатов фильтрации на странице магазина. Этот подход позволяет создать гибкую и расширяемую систему фильтрации, которая легко адаптируется к изменяющимся требованиям.

Шаг 1: Добавление пользовательских полей атрибутов

Первый шаг – определение и регистрация необходимых атрибутов для фильтрации товаров. Это основа для дальнейшей работы.

Регистрация атрибута в WooCommerce

Для регистрации нового атрибута в WooCommerce используется функция woocommerce_attribute. Эта функция принимает название атрибута, метку (отображаемое имя) и другие параметры, такие как тип атрибута (текст, число, select и т.д.). Важно выбрать подходящий тип атрибута, так как это повлияет на способ его отображения и фильтрации.

Пример кода для регистрации атрибута «Материал»:


add_action( 'woocommerce_attribute', function {
 woocommerce_attribute_add( 'material', 'Материал', 'select' );
});

В этом примере мы добавляем атрибут с именем «material», отображаемым именем «Материал» и типом «select», что означает, что значения атрибута будут представлены в виде выпадающего списка. Не забудьте очистить кэш WooCommerce после добавления нового атрибута, чтобы изменения вступили в силу.

После регистрации атрибута, он появится в настройках товара, где вы сможете добавить значения для каждого товара. Правильная регистрация атрибута – это ключевой шаг для успешной фильтрации товаров в WooCommerce.

Отображение атрибута на странице товара

После регистрации атрибута необходимо убедиться, что он отображается на странице товара, чтобы пользователи могли видеть его значения. WooCommerce автоматически отображает атрибуты, если они добавлены к товару. Однако, вы можете настроить способ отображения атрибутов с помощью шаблонов WooCommerce.

Важно помнить, что изменения в шаблонах WooCommerce могут быть перезаписаны при обновлении темы. Поэтому рекомендуется использовать дочернюю тему и тщательно тестировать все изменения перед их внедрением на рабочий сайт. Вы также можете использовать хуки WooCommerce для добавления или изменения отображения атрибутов без изменения шаблонов.

Убедитесь, что атрибут отображается корректно и понятно для пользователей. Это поможет им быстро находить нужные товары и принимать решения о покупке. Четкое отображение атрибутов – важный элемент удобства использования интернет-магазина.

Шаг 2: Создание формы фильтрации

Получение значений атрибутов для фильтра

Для создания формы фильтрации необходимо получить все уникальные значения зарегистрированных атрибутов. Это можно сделать с помощью функции wc_get_product_terms. Эта функция принимает ID товара или null (для получения всех терминов атрибута) и название атрибута.

Пример кода для получения значений атрибута «Материал»:


$terms = wc_get_product_terms( null, 'material' );

Результатом будет массив объектов, содержащих информацию о каждом значении атрибута, включая его ID и название. Важно обработать этот массив и извлечь только названия атрибутов для отображения в форме фильтрации.

Не забудьте отсортировать значения атрибутов для улучшения пользовательского опыта. Например, можно отсортировать их по алфавиту или по популярности.

Шаг 3: Обработка фильтрации и запрос к базе данных

Теперь необходимо обработать данные, отправленные из формы фильтрации, и модифицировать запрос к базе данных WooCommerce.

Получение выбранных значений фильтра

После отправки формы фильтрации необходимо получить значения атрибутов, выбранные пользователем. Это можно сделать с помощью глобального массива $_POST, который содержит данные, отправленные методом POST. Важно проверить, были ли вообще отправлены данные из формы, и очистить полученные значения от потенциально вредоносного кода.

Пример кода для получения выбранных значений атрибута «Материал»:


if ( isset( $_POST['material'] ) ) {
 $selected_materials = sanitize_text_field( $_POST['material'] );
 // $selected_materials теперь содержит массив выбранных значений
}

В этом примере мы проверяем, существует ли ключ ‘material’ в массиве $_POST. Если он существует, мы получаем его значение и очищаем его с помощью функции sanitize_text_field, чтобы предотвратить XSS-атаки. Очистка данных – важный шаг для обеспечения безопасности вашего сайта.

Убедитесь, что вы обрабатываете все атрибуты, для которых предусмотрена фильтрация. Правильное получение и обработка выбранных значений – основа для создания точного и эффективного фильтра.

Модификация запроса WooCommerce для фильтрации

Для модификации запроса WooCommerce используется хук woocommerce_product_query. Этот хук позволяет перехватить объект WP_Query, используемый для получения товаров, и изменить его параметры. Важно понимать структуру объекта WP_Query и знать, как добавить условия фильтрации.

Пример кода для добавления условия фильтрации по атрибуту «Материал»:


add_filter( 'woocommerce_product_query', function( $query ) {
 if ( isset( $_POST['material'] ) && ! empty( $_POST['material'] ) ) {
 $tax_query = array(
 array(
 'taxonomy' => 'pa_material', // Имя таксономии атрибута
 'field' => 'term_id',
 'terms' => $_POST['material'],
 'operator' => 'AND',
 ),
 ); $query->set( 'tax_query', $tax_query );
 }
 return $query;
});

В этом примере мы добавляем условие tax_query к объекту WP_Query, которое фильтрует товары по значению атрибута «Материал». Убедитесь, что вы используете правильное имя таксономии атрибута (в данном случае ‘pa_material’). Правильная модификация запроса – ключевой шаг для получения отфильтрованных товаров.

Шаг 4: Отображение отфильтрованных товаров

Финальный этап – вывод отфильтрованных товаров на странице магазина, используя стандартные шаблоны WooCommerce.