Работает с данными отдельного товара WooCommerce: названием, ценами, остатками, изображениями, атрибутами и другими свойствами. Позволяет создавать, получать, изменять и удалять товары.
Работает с данными отдельного товара WooCommerce: названием, ценами, остатками, изображениями, атрибутами и другими свойствами. Позволяет создавать, получать, изменять и удалять товары.
Это базовый класс товаров. Конкретные типы представлены его наследниками:
| Класс | Тип товара |
|---|---|
| WC_Product_Simple{} | Простой товар. |
| WC_Product_Variable{} | Вариативный товар. |
| WC_Product_Variation{} | Отдельная вариация. |
| WC_Product_Grouped{} | Сгруппированный товар. |
| WC_Product_External{} | Внешний/партнёрский товар. |
Несмотря на слово Abstract в описании исходного кода, класс не объявлен абстрактным. Создать new WC_Product() технически можно, но для нового товара следует выбирать класс соответствующего типа.
Данные читаются методами get_*(), изменяются методами set_*() и записываются в БД методом save(). Работу с хранилищем класс выполняет через Data Store. Поэтому код не должен самостоятельно обновлять служебные метаполя вроде _price или _stock.
Основные методы:
| Метод | Назначение |
|---|---|
| get_id() | ID товара. У нового несохранённого объекта — 0. |
| get_type() | Тип товара: simple, variable, variation и другие. |
| get_name() | Название. |
| get_sku() | Артикул. |
| get_description() | Полное описание. |
| get_short_description() | Краткое описание. |
| get_permalink() | Ссылка на товар. |
| get_price() | Текущая цена без HTML и обозначения валюты. |
| get_regular_price() | Обычная цена. |
| get_sale_price() | Акционная цена. |
| get_price_html() | HTML цены с форматированием, валютой и учётом настроек отображения налогов. |
| get_image() | HTML основного изображения. |
| get_image_id() | ID основного изображения. |
| get_gallery_image_ids() | ID изображений галереи. |
| get_category_ids() | ID категорий. |
| get_tag_ids() | ID меток. |
| get_stock_quantity() | Остаток. |
| get_stock_status() | Статус наличия. |
| get_attributes() | Все атрибуты. |
| get_attribute() | Значение одного атрибута. |
| get_meta() | Чтение пользовательского метаполя. |
| update_meta_data() | Изменение пользовательского метаполя. |
| get_data() | Массив данных объекта. |
| get_changes() | Изменённые свойства, ожидающие сохранения. |
| set_props() | Установка нескольких свойств через массив. |
| save() | Создание или обновление товара. Результат — ID товара. |
| delete() | Удаление. При true — окончательное. |
Для проверок доступны:
| Метод | Назначение |
|---|---|
| is_type() | Checks the product type. |
| is_on_sale() | Returns whether or not the product is on sale. |
| is_in_stock() | Returns whether or not the product can be purchased. This returns true for 'instock' and 'onbackorder' stock statuses. |
| is_purchasable() | Returns false if the product cannot be bought. |
| is_visible() | Returns whether or not the product is visible in the catalog. |
| is_virtual() | Checks if a product is virtual (has no shipping). |
| is_downloadable() | Checks if a product is downloadable. |
is_purchasable() не заменяет проверку остатков. А is_in_stock() допускает статус onbackorder, поэтому его результат не обязательно означает положительное количество на складе.
Многие методы получения свойств принимают $context:
view - значение с применением фильтров WooCommerce. Используется по умолчанию.edit - значение без фильтров получения свойства. Подходит для редактирования и последующего сохранения.Контекст edit учитывает уже внесённые изменения объекта. Он не перечитывает значение из БД.
Используйте wc_get_product(), когда нужно получить существующий товар. Функция определяет его тип и создаёт объект подходящего класса.
Используйте wc_get_products(), когда нужно получить список товаров по условиям.
Методы set_*() меняют данные только в объекте. Чтобы записать изменения в БД, вызовите save().
Некоторые методы установки свойств выбрасывают исключение WC_Data_Exception при некорректных данных. Метод set_props() собирает такие ошибки в WP_Error. При этом успешно обработанные свойства остаются изменёнными: автоматического отката нет.
null.
new WC_Product(). Сам конструктор отдельного значения не возвращает.Создание объекта без ID не добавляет товар в БД. Запись создаётся при вызове save().
$wc_product = new WC_Product( $product ); // use class methods
Товар для инициализации объекта. Параметр конструктора.
WC_Product - взять его ID и загрузить данные из БД. Несохранённые изменения переданного объекта не копируются.ID, например WP_Post - загрузить товар по этому ID.0 - создать объект нового товара.Прямой вызов конструктора не выбирает класс по типу существующего товара.
При положительном ID отсутствующего товара или записи неподходящего типа стандартное хранилище выбрасывает Exception. Функция wc_get_product() перехватывает исключение и в таком случае возвращает false.
По умолчанию: 0
Код предназначен для шаблона, который выполняется после инициализации WooCommerce.
$product = wc_get_product( 123 );
if ( ! $product ) {
return;
}
printf(
'<a href="%s">%s</a>',
esc_url( $product->get_permalink() ),
esc_html( $product->get_name() )
);
echo wp_kses_post( $product->get_image() );
echo wp_kses_post( $product->get_price_html() );get_price() получает цену строкой, например '1500'. Если цена не задана, результат - ''. Нулевая цена '0' допустима, поэтому проверка через empty() здесь не подходит.
$product = wc_get_product( 123 );
if ( ! $product ) {
return;
}
$display_price = $product->get_price();
$edit_price = $product->get_price( 'edit' );Первый вызов допускает изменение цены фильтрами. Второй получает текущее значение свойства без этих фильтров.
#3 Изменение цены простого товараУстановим обычную цену и уберём акционную цену вместе с её расписанием:
$product = wc_get_product( 123 );
if ( ! $product || ! $product->is_type( 'simple' ) ) {
return;
}
$product->set_regular_price( '1500' );
$product->set_sale_price( '' );
$product->set_date_on_sale_from( null );
$product->set_date_on_sale_to( null );
$product->save();При сохранении стандартное хранилище пересчитает текущую цену с учётом изменений.
Для вариативного товара цены задаются у отдельных вариаций. Цена родительского товара синхронизируется с ними.
#4 Создание простого товараСоздадим черновик с ценой и учётом остатков:
$product = new WC_Product_Simple();
$result = $product->set_props( [
'name' => 'Футболка',
'status' => 'draft',
'regular_price' => '1500',
'manage_stock' => true,
'stock_quantity' => 10,
] );
if ( is_wp_error( $result ) ) {
return;
}
$product_id = $product->save();Ключи массива соответствуют названиям свойств без префикса set_. Например, regular_price обрабатывается методом set_regular_price().
set_props() возвращает true или WP_Error. Неизвестные свойства без подходящего метода установки пропускаются.
При сохранении товара с включённым учётом остатков статус наличия определяется по количеству, порогу отсутствия товара и настройке предзаказов. Если учёт остатков отключён, количество сбрасывается в null.
$product = wc_get_product( 123 );
if ( ! $product ) {
return;
}
$product->update_meta_data( '_supplier_code', 'ABC-123' );
$product->save();
$supplier_code = $product->get_meta( '_supplier_code' );Для удаления пользовательского метаполя используется delete_meta_data(), после которого также нужно сохранить изменения:
$product->delete_meta_data( '_supplier_code' ); $product->save();
Служебные свойства товара изменяйте специальными методами: например, артикул - через set_sku(), цену - через set_regular_price().
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Хук-Фильтр WordPress: wp_title | 0 | 18.33 | 20-09-2026 |
| 2 | Хук-Фильтр WordPress: the_category | 0 | 19.09 | 20-09-2026 |
| 3 | Хук-Фильтр WordPress: paginate_links | 0 | 17.69 | 20-09-2026 |
| 4 | Хук-Фильтр WordPress: get_the_excerpt | 0 | 19.09 | 22-09-2026 |
| 5 | Хук-событие WordPress: restrict_manage_posts | 0 | 12.4 | 22-09-2026 |
| 6 | Хук-событие WordPress: edit_post_(post_type) | 0 | 18.33 | 22-09-2026 |
| 7 | Функция WordPress: get_site() | 0 | 6.94 | 29-09-2026 |
| 8 | Хук-событие WordPress: network_admin_edit_(action) | 0 | 21.16 | 01-10-2026 |
| 9 | Хук-Фильтр WordPress: post_type_link | 0 | 21.11 | 21-09-2026 |
| 10 | Хук-Фильтр WordPress: excerpt_length | 0 | 19.41 | 20-09-2026 |