wc_get_products() — официальный и безопасный способ получения товаров в WooCommerce. Он не зависит от структуры базы данных и остаётся стабильным при обновлениях, поэтому отлично подходит для разработки плагинов и тем.
Возвращает
wc_get_products() возвращает массив объектов WC_Product.
Каждый элемент массива — это объект товара WooCommerce (например WC_Product_Simple, WC_Product_Variable и др.), через который можно получить ID, название, цену, наличие и другие свойства товара.
Если товары не найдены, функция возвращает пустой массив.
Использование
1$products = wc_get_products( [] );
Аргументы по умолчанию
Если аргументы не переданы, используются такие значения:
1[
2 'limit' => get_option( 'posts_per_page' ),
3 'status' => ['publish', 'draft', 'pending', 'private'],
4 'type' => ['simple', 'variable', 'grouped', 'external'],
5 'orderby' => 'date',
6 'order' => 'DESC',
7 'page' => 1,
8 'return' => 'objects',
9 'paginate' => false,
10]
Частые примеры использования
Получить последние опубликованные товары
1$products = wc_get_products( [
2 'status' => 'publish',
3 'limit' => 9,
4] );
Получить товары по категории
1$products = wc_get_products( [
2 'status' => 'publish',
3 'category' => ['hoodies'],
4] );
Получить товары по категориям (AND)
Вернёт товары, которые находятся ОДНОВРЕМЕННО в категориях hoodies и tshirts.
1$products = wc_get_products( [
2 'status' => 'publish',
3 'category' => ['hoodies', 'tshirts'],
4] );
Получить товары по категориям (OR)
Вернёт товары, которые находятся хотя бы в одной из категорий.
1$products = wc_get_products( [
2 'status' => 'publish',
3 'tax_query' => [
4 [
5 'taxonomy' => 'product_cat',
6 'field' => 'slug',
7 'terms' => ['hoodies', 'tshirts'],
8 'operator' => 'IN',
9 ],
10 ],
11] );
Получить товары в наличии
1$products = wc_get_products( [
2 'status' => 'publish',
3 'stock_status' => 'instock',
4] );
Получить конкретные товары по ID
1$products = wc_get_products( [
2 'include' => [12, 34, 56],
3] );
Часто используемые аргументы
Ниже — аргументы, которые используются чаще всего в реальных проектах.
status
(string/array)
Статус продукта.
Например: 'status' => 'publish' или 'status' => ['publish', 'draft'].
По умолчанию: ['publish', 'draft', 'pending', 'private'].
Возможные значения:
- publish - опубликованный
- all - все статусы
- pending - ожидающий
- draft - черновик
- trash - в корзине
- private - приватный
- future - будущий
- auto-draft - авто-черновик
- пользовательские статусы
type
(string/array)
Тип продукта.
Например: 'type' => 'simple' или 'type' => ['simple', 'variable'].
По умолчанию: ['simple', 'variable', 'grouped', 'external'].
Возможные значения:
- simple — простой товар
- variable — вариативный товар
- variation — вариация
- grouped — сгруппированный
- external — внешний
- пользовательские типы
limit
(int)
Количество продуктов, которые нужно получить.
Например: 'limit' => 10.
По умолчанию: значение из настройки WordPress.
Примечание:
-1— получить все продукты
page
(int)
Номер страницы (для пагинации).
Например: 'page' => 2.
По умолчанию: 1.
Используется вместе с limit.
orderby
(string)
Поле, по которому выполняется сортировка.
Например: 'orderby' => 'date'.
По умолчанию: date.
Возможные значения:
- none - без сортировки
- ID - по идентификатору продукта
- name - по имени
- type - по типу
- rand - в случайном порядке
- date - по дате
- modified - по дате изменения
order
(string)
Направление сортировки.
Например: 'order' => 'ASC'.
По умолчанию: DESC.
Возможные значения:
ASC— по возрастаниюDESC— по убыванию
category
(string/array)
Фильтрация продуктов по категориям.
Если передан массив, будут возвращены только товары, которые одновременно принадлежат всем указанным категориям.
Например: 'category' => ['t-shirts', 'hoodies'].
Важно:
- используются slug категорий, а не ID
tag
(string/array)
Фильтрация продуктов по тегам.
Если передан массив, будут возвращены только товары, которые одновременно принадлежат всем указанным тегам.
Например: 'tag' => ['sale', 'new'].
include
(array)
Явно указать, какие продукты нужно получить.
Например: 'include' => [12, 34, 56].
exclude
(array)
Исключить продукты по ID.
Например: 'exclude' => [10, 20].
stock_status
(string)
Фильтр по наличию товара.
Например: 'stock_status' => 'instock'.
Возможные значения:
instock- в наличииoutofstock- нет в наличииonbackorder- под заказlowstock- мало на складе
sku
(string)
Артикул продукта. Выполняет поиск по частичному сопоставлению.
Например, для 'sku' => 'PRDCT', найдет PRDCT-1 и PRDCT-2.
visibility
(string)
Видимость продукта в каталоге.
Например: 'visibility' => 'visible'.
По умолчанию: возвращает все товары, включая скрытые (hidden).
Возможные значения:
- visible — виден в каталоге и поиске
- catalog — только в каталоге
- search — только в поиске
- hidden — скрыт
price
(integer/string)
Фильтрация по цене.
Например: 'price' => 10 или 'price' => '10.50'.
Например: 'regular_price' => 10 или 'regular_price' => '10.50'.
Например: 'sale_price' => 10 или 'sale_price' => '10.50'.
return
(string)
Формат возвращаемых данных.
Например: 'return' => 'ids'.
По умолчанию: objects.
Возможные значения:
objects— объекты WC_Productids— только ID продуктов
paginate
(bool)
Включить режим пагинации.
Например: 'paginate' => true.
По умолчанию: false.
Если включено, функция вернёт объект с:
products— массив продуктовtotal— общее количество продуктовmax_num_pages— максимальное количество страниц
Пример:
1$args = array(
2 'paginate' => true,
3);
4$results = wc_get_products( $args );
5
6echo 'Найдено продуктов: ' . $results->total . '\n';
7echo 'Страница 1 из ' . $results->max_num_pages . '\n';
8echo 'ID первого продукта: ' . $results->products[0]->get_id() . '\n';