WooCommerce

Как получить все данные товара WooCommerce по его ID: объект WC_Product и его методы

M
Markabus
·
Фотореалистичный кадр стола приёмки товара: кожаный рюкзак стоит на почтовых весах, вдоль него растянута жёлтая рулетка, рядом штангенциркуль и крафтовая бирка со штрихкодом, слева монитор с админской карточкой товара — длинная форма с вкладками и полями — иллюстрация к статье о получении всех данных товара WooCommerce по его ID.

Все данные товара в WooCommerce живут в объекте класса WC_Product. Работать с ним правильнее, чем читать post_meta напрямую: объект знает, где хранится каждое поле, применяет фильтры и одинаково ведёт себя для всех типов товаров. Ниже — как получить объект по ID, шпаргалка по его методам и несколько мест, где новичков ждут неожиданности.

Получаем объект товара

$product = wc_get_product( $product_id );

if ( ! $product ) {
    return; // товара с таким ID нет или он не является товаром
}

echo $product->get_name();

Функция возвращает false, если ID не найден, поэтому проверка обязательна. Внутри цикла товаров объект уже есть в глобальной переменной $product, и вызывать wc_get_product() без аргумента там тоже можно — она возьмёт текущий пост.

Важно, что функция возвращает не всегда один и тот же класс: для простого товара это WC_Product_Simple, для вариативного — WC_Product_Variable, для вариации — WC_Product_Variation, есть ещё сгруппированные и внешние товары. Общие методы у них одинаковые, но часть методов существует только у своего типа. Узнать тип можно через $product->get_type() или проверить $product->is_type( 'variable' ).

Шпаргалка по методам

// Основное
$product->get_id();
$product->get_name();
$product->get_slug();
$product->get_permalink();
$product->get_type();               // simple, variable, variation, grouped, external
$product->get_status();             // publish, draft, private…
$product->get_sku();
$product->get_description();
$product->get_short_description();
$product->get_catalog_visibility();
$product->get_menu_order();
$product->get_date_created();       // объект WC_DateTime
$product->get_date_modified();

// Цены и скидки
$product->get_price();              // актуальная цена (строка, без валюты)
$product->get_regular_price();
$product->get_sale_price();
$product->is_on_sale();
$product->get_date_on_sale_from();
$product->get_date_on_sale_to();
$product->get_price_html();         // готовая цена для вывода, с валютой и зачёркиванием
$product->get_total_sales();

// Наличие
$product->get_stock_status();       // instock, outofstock, onbackorder
$product->is_in_stock();
$product->get_manage_stock();
$product->get_stock_quantity();
$product->get_low_stock_amount();
$product->get_backorders();
$product->get_sold_individually();
$product->is_purchasable();

// Налоги и доставка
$product->get_tax_status();
$product->get_tax_class();
$product->get_shipping_class_id();
$product->get_shipping_class();     // ярлык класса доставки
$product->is_virtual();
$product->is_downloadable();
$product->get_downloads();

// Размеры и вес
$product->get_weight();
$product->get_length();
$product->get_width();
$product->get_height();
$product->get_dimensions();         // готовая строка вида «10 × 20 × 30 см»
$product->get_dimensions( false );  // массив с отдельными значениями

// Таксономии и связи
$product->get_category_ids();
$product->get_tag_ids();
$product->get_upsell_ids();
$product->get_cross_sell_ids();
$product->get_parent_id();          // для вариации — ID родителя, иначе 0

// Изображения
$product->get_image_id();
$product->get_image( 'woocommerce_thumbnail' ); // готовый тег img
$product->get_gallery_image_ids();

// Атрибуты
$product->get_attributes();         // массив объектов WC_Product_Attribute
$product->get_attribute( 'pa_color' ); // значения одного атрибута строкой

// Отзывы
$product->get_reviews_allowed();
$product->get_average_rating();
$product->get_review_count();
$product->get_rating_counts();

// Прочее
$product->get_purchase_note();
$product->get_featured();
$product->get_meta( '_my_field' );  // произвольное поле

На что обратить внимание

Цены — это строки

Методы get_price(), get_regular_price() и get_sale_price() возвращают строку без форматирования, как она хранится в базе, и не учитывают налоги. Для вывода покупателю используйте get_price_html() или wc_price( $product->get_price() ). Для цены с учётом настроек отображения налогов есть wc_get_price_to_display( $product ). Для арифметики приводите строку к числу.

Даты — это объекты

Методы get_date_created(), get_date_modified() и даты распродажи возвращают объект WC_DateTime либо null, если дата не задана. Строку из него даёт метод date( 'Y-m-d' ) или date_i18n() для локализованного формата.

Произвольные поля — через get_meta()

Для собственных мета-полей используйте $product->get_meta( '_my_field' ), а не get_post_meta(): метод объекта учитывает, где WooCommerce хранит данные товара, и совместим с будущими изменениями хранилища. Запись — через update_meta_data() и обязательный save():

$product->update_meta_data( '_my_field', 'значение' );
$product->save();

Вариативные товары и вариации

У вариативного товара цены и остатки хранятся в вариациях, поэтому у родителя get_price() вернёт минимальную цену, а для полного набора есть отдельные методы:

$product = wc_get_product( 256 ); // вариативный товар

$product->get_children();                 // массив ID вариаций
$product->get_variation_price( 'min' );   // минимальная цена, 'max' — максимальная
$product->get_available_variations();     // массив данных всех доступных вариаций

$variation = wc_get_product( 257 );       // конкретная вариация
$variation->get_parent_id();              // 256
$variation->get_variation_attributes();   // [ 'attribute_pa_color' => 'red' ]
$variation->get_price();                  // цена именно этой вариации

Название, описание и категории у вариации берутся от родителя, поэтому за ними нужно обращаться к нему.

Все данные разом

Метод get_data() возвращает основные поля товара одним ассоциативным массивом — удобно для отладки, экспорта или передачи в JSON:

$data = $product->get_data();
// [ 'id' => 256, 'name' => '…', 'price' => '1990', 'stock_status' => 'instock', … ]

В массив не попадают вычисляемые значения вроде get_price_html() и часть данных вариаций, но для быстрого взгляда на товар его достаточно.

Много товаров сразу

Если нужны данные не одного товара, а выборки, не вызывайте wc_get_product() в цикле по ID из своего запроса. Функция wc_get_products() принимает те же условия — статус, категорию, наличие, лимит — и возвращает готовые объекты:

$products = wc_get_products( array(
    'status'       => 'publish',
    'category'     => array( 'svetilniki' ),
    'stock_status' => 'instock',
    'limit'        => 20,
) );

Коротко

wc_get_product( $id ) даёт объект товара, и всё остальное — его методы: цены как строки, даты как объекты, произвольные поля через get_meta(). Проверяйте результат на false, помните о типах товаров и берите данные вариаций из самих вариаций. Для отладки есть get_data(), для выборок — wc_get_products().

Частые вопросы

Q.Почему get_price() возвращает строку без валюты?

Метод отдаёт цену так, как она хранится в базе. Для вывода покупателю используйте get_price_html() или wc_price(), для цены с учётом налогов — wc_get_price_to_display().

Q.Как получить произвольное поле товара?

Через $product->get_meta( 'ключ' ). Запись — update_meta_data() и затем save(). Прямой get_post_meta() тоже работает, но метод объекта не зависит от способа хранения данных.

Q.Как получить цену вариативного товара?

У родителя get_variation_price( 'min' ) и get_variation_price( 'max' ) дают диапазон, get_available_variations() — данные каждой вариации. Цена конкретной вариации — у её собственного объекта через wc_get_product( $variation_id ).

Q.Как превратить дату создания товара в строку?

get_date_created() возвращает объект WC_DateTime или null. Проверьте на null и вызовите date( 'd.m.Y' ) или date_i18n() для локализованного формата.

Источники

Предыдущая
Кнопка «Перейти в корзину» вместо «В корзину», если товар уже добавлен: WooCommerce без правки шаблонов

Читайте также

Фотореалистичный кадр рабочего стола: на переднем плане проволочная магазинная корзинка с серым керамическим чайником на упаковочной бумаге, за ней открытый ноутбук с карточкой того же чайника, где под ценой контурная кнопка с иконкой корзины и стрелкой вместо обычной кнопки покупки — иллюстрация к статье о замене кнопки «В корзину» на «Перейти в корзину» для товаров, уже добавленных в корзину WooCommerce.WooCommerce
12 сентября 2026 г.

Кнопка «Перейти в корзину» вместо «В корзину», если товар уже добавлен: WooCommerce без правки шаблонов

Покупатель уже положил товар в корзину, а карточка по-прежнему предлагает «В корзину» — так появляются случайные дубли. Показываем, как заменить кнопку на «Перейти в корзину» для товаров, которые уже в корзине: хуками, без правки шаблонов, в карточке товара и в каталоге, с учётом Ajax-добавления и кеширования страниц.

Читать →
Фотореалистичный кадр сверху на прилавок небольшой лавки: планшет в подставке со страницей корзины, где у средней строки выделено поле количества, а блок итогов полупрозрачный с кольцом загрузки и под таблицей пустое место без кнопок, рядом плетёная корзинка с мылом, свечами и банкой джема, слева крафтовые пакеты и бечёвка — иллюстрация к статье о скрытии кнопки «Обновить корзину» и автообновлении корзины WooCommerce.WooCommerce
12 сентября 2026 г.

Как скрыть кнопку «Обновить корзину» в WooCommerce и обновлять корзину автоматически

Кнопка «Обновить корзину» — лишний шаг для покупателя: изменил количество, забыл нажать, и итог не пересчитался. Показываем, как заставить классическую корзину WooCommerce обновляться сама при изменении количества, спрятать кнопку одним CSS-правилом и почему в блочной корзине делать ничего не нужно.

Читать →
Фотореалистичный кадр сортировочного стола склада: три открытых крафтовых ящика с пустыми бирками, в среднем — настольная лампа с картонной биркой со штрихкодом на бечёвке, рядом смартфон с экраном редактирования товара, где в дереве категорий отмечена одна галочка — иллюстрация к статье о том, как получить категорию товара WooCommerce по его ID.WooCommerce
12 сентября 2026 г.

Как программно получить категорию товара WooCommerce по его ID

Название, ID или ссылка на категорию товара нужны в шаблонах, письмах и интеграциях постоянно. Разбираем безопасные способы получить категории по ID товара: get_the_terms(), wc_get_product_terms(), метод get_category_ids() у объекта товара, выбор главной категории, вариации и готовый вывод со ссылками.

Читать →