Как использовать функцию wc_get_products для эффективного получения товаров WooCommerce

Что такое wc_get_products и зачем она нужна

Функция wc_get_products() появилась в WooCommerce начиная с версии 3.0 и служит удобным оберткой для получения списка товаров по заданным параметрам. Это более современный и гибкий способ вместо использования прямого WP_Query по типу записи product.

Она возвращает массив объектов WC_Product, с которыми удобно работать благодаря методам класса.

Диагностика: когда использовать wc_get_products вместо WP_Query

Если вы часто делаете выборку товаров с фильтрацией по атрибутам, типам, метаданным и хотите получить именно объекты WC_Product, то wc_get_products() будет удобнее и быстрее. Однако, если вам нужна сложная кастомная выборка с JOIN и нестандартными параметрами, лучше использовать WP_Query или WC_Product_Query.

Признаки необходимости wc_get_products:

  • Нужно получить товары с фильтрами по цене, статусу, категории, тэгам;
  • Требуется быстро получить объекты с методами (например, get_price(), get_name());
  • Хотите избежать дублирования кода и использовать стандартный API WooCommerce.

Пошаговое решение: пример использования wc_get_products

Допустим, нужно получить 10 опубликованных товаров из категории aksessuary с ценой ниже 3000 рублей.

 $args = [
    'limit' => 10,
    'category' => ['aksessuary'],
    'status' => 'publish',
    'max_price' => 3000
];

$products = wc_get_products($args);

foreach ($products as $product) {
    echo $product->get_name() . ' — ' . wc_price($product->get_price()) . "\n";
}

Пояснения к параметрам:

  • limit — максимальное число товаров;
  • category — массив с слагами категорий;
  • status — статус публикации товара;
  • max_price — максимальная цена (фильтр по метаполю _price).

Фильтрация по нескольким параметрам

Можно комбинировать фильтры, например, получить продукты с тегом sale, сортировкой по цене и с определённым атрибутом:

 $args = [
    'limit' => 5,
    'tag' => ['sale'],
    'orderby' => 'price',
    'order' => 'ASC',
    'attribute' => 'color',
    'attribute_term' => 'blue'
];

$products = wc_get_products($args);
<

Обратите внимание, что для фильтрации по атрибутам используются параметры attribute и attribute_term — слаг атрибута и термин таксономии соответственно.

Проверка результата после внедрения

1. Добавьте код в файл темы или плагина и выведите результаты на страницу или в лог.

2. Проверьте, что возвращается массив объектов WC_Product с нужными параметрами.

3. Убедитесь, что фильтры работают корректно, изменяя параметры и анализируя результат.

Частые ошибки и как их исправить

  • Пустой массив товаров: проверьте правильность слагов категорий и тегов, статус товара, а также наличие товаров, соответствующих условиям.
  • Неправильно фильтруются атрибуты: убедитесь, что используете правильные слаги атрибута и терминов (например, атрибут color будет в виде pa_color в таксономии).
  • Неверный тип возвращаемых данных: wc_get_products() возвращает объекты WC_Product, а не массивы данных. Для вывода используйте методы объекта.

Практические советы по производительности и безопасности

  • Используйте параметр limit для ограничения количества возвращаемых товаров, чтобы не нагружать базу.
  • Кэшируйте результаты выборки, если данные не меняются часто, например, с помощью Transients API.
  • Избегайте вывода данных напрямую из объекта без проверки, чтобы не допустить XSS-уязвимости.
  • Если фильтрация по ценам не работает, проверьте, что метаполе _price индексировано в базе.

Сравнение методов получения товаров: wc_get_products vs WP_Query vs WC_Product_Query

МетодПреимуществаНедостаткиКогда использовать
wc_get_products()Простота, возвращает WC_Product, встроенные фильтрыОграниченные возможности сложных запросовБыстрая выборка с базовыми фильтрами
WP_QueryГибкость, мощный запросВозвращает WP_Post, требуется дополнительная обработкаСложные запросы с JOIN, нестандартные условия
WC_Product_QueryСпециализирован для товаров, гибкийСложнее в использовании, требует понимания классаПродвинутые выборки с кастомными условиями
Как успешно запустить собственный плагин WordPress в продакшн: практические советы
20.12.2025
Как автоматизировать обновления плагинов WordPress без рисков
29.11.2025
Как удалить неиспользуемые метаданные WooCommerce без потери данных
24.06.2026
Как создать автоматические записи в WordPress с помощью Cron
25.12.2025
Автоматическое создание Sitemap в WordPress с поддержкой Multisite
09.02.2026