• WooCommerce
  • Получение продуктов WooCommerce — wc_get_products

    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_Product
    • ids — только 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';
    

    Полезные ссылки