Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Функция WordPress: WC_Product{}

Дата публикации: 03-10-2026 18:45:15

Работает с данными отдельного товара 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.

  • WC_Product - объект при создании через new WC_Product(). Сам конструктор отдельного значения не возвращает.

Создание объекта без ID не добавляет товар в БД. Запись создаётся при вызове save().

Использование
$wc_product = new WC_Product( $product );
// use class methods
$product(число|WC_Product|объект)

Товар для инициализации объекта. Параметр конструктора.

  • Положительный ID - загрузить данные товара из БД.
  • Объект WC_Product - взять его ID и загрузить данные из БД. Несохранённые изменения переданного объекта не копируются.
  • Объект с полем ID, например WP_Post - загрузить товар по этому ID.
  • 0 - создать объект нового товара.

Прямой вызов конструктора не выбирает класс по типу существующего товара.

При положительном ID отсутствующего товара или записи неподходящего типа стандартное хранилище выбрасывает Exception. Функция wc_get_product() перехватывает исключение и в таком случае возвращает false.

По умолчанию: 0

Методы
  1. public __construct( $product = 0 )
  2. public get_type()
  3. public get_name( $context = 'view' )
  4. public get_slug( $context = 'view' )
  5. public get_date_created( $context = 'view' )
  6. public get_date_modified( $context = 'view' )
  7. public get_status( $context = 'view' )
  8. public get_featured( $context = 'view' )
  9. public get_catalog_visibility( $context = 'view' )
  10. public get_description( $context = 'view' )
  11. public get_short_description( $context = 'view' )
  12. public get_sku( $context = 'view' )
  13. public get_global_unique_id( $context = 'view' )
  14. public get_price( $context = 'view' )
  15. public get_regular_price( $context = 'view' )
  16. public get_sale_price( $context = 'view' )
  17. public get_date_on_sale_from( $context = 'view' )
  18. public get_date_on_sale_to( $context = 'view' )
  19. public get_total_sales( $context = 'view' )
  20. public get_tax_status( $context = 'view' )
  21. public get_tax_class( $context = 'view' )
  22. public get_manage_stock( $context = 'view' )
  23. public get_stock_quantity( $context = 'view' )
  24. public get_stock_status( $context = 'view' )
  25. public get_backorders( $context = 'view' )
  26. public get_low_stock_amount( $context = 'view' )
  27. public get_sold_individually( $context = 'view' )
  28. public get_weight( $context = 'view' )
  29. public get_length( $context = 'view' )
  30. public get_width( $context = 'view' )
  31. public get_height( $context = 'view' )
  32. public get_dimensions( $formatted = true )
  33. public get_upsell_ids( $context = 'view' )
  34. public get_cross_sell_ids( $context = 'view' )
  35. public get_parent_id( $context = 'view' )
  36. public get_reviews_allowed( $context = 'view' )
  37. public get_purchase_note( $context = 'view' )
  38. public get_attributes( $context = 'view' )
  39. public get_default_attributes( $context = 'view' )
  40. public get_menu_order( $context = 'view' )
  41. public get_post_password( $context = 'view' )
  42. public get_category_ids( $context = 'view' )
  43. public get_tag_ids( $context = 'view' )
  44. public get_brand_ids( $context = 'view' )
  45. public get_virtual( $context = 'view' )
  46. public get_gallery_image_ids( $context = 'view' )
  47. public get_shipping_class_id( $context = 'view' )
  48. public get_downloads( $context = 'view' )
  49. public get_download_expiry( $context = 'view' )
  50. public get_downloadable( $context = 'view' )
  51. public get_download_limit( $context = 'view' )
  52. public get_image_id( $context = 'view' )
  53. public get_rating_counts( $context = 'view' )
  54. public get_average_rating( $context = 'view' )
  55. public get_review_count( $context = 'view' )
  56. public set_name( $name )
  57. public set_slug( $slug )
  58. public set_date_created( $date = null )
  59. public set_date_modified( $date = null )
  60. public set_status( $status )
  61. public set_featured( $featured )
  62. public set_catalog_visibility( $visibility )
  63. public set_description( $description )
  64. public set_short_description( $short_description )
  65. public set_sku( $sku )
  66. public set_global_unique_id( $global_unique_id )
  67. public set_price( $price )
  68. public set_regular_price( $price )
  69. public set_sale_price( $price )
  70. public set_date_on_sale_from( $date = null )
  71. public set_date_on_sale_to( $date = null )
  72. public set_total_sales( $total )
  73. public set_tax_status( $status )
  74. public set_tax_class( $class )
  75. public set_manage_stock( $manage_stock )
  76. public set_stock_quantity( $quantity )
  77. public set_stock_status( $status = ProductStockStatus::IN_STOCK )
  78. public set_backorders( $backorders )
  79. public set_low_stock_amount( $amount )
  80. public set_sold_individually( $sold_individually )
  81. public set_weight( $weight )
  82. public set_length( $length )
  83. public set_width( $width )
  84. public set_height( $height )
  85. public set_upsell_ids( $upsell_ids )
  86. public set_cross_sell_ids( $cross_sell_ids )
  87. public set_parent_id( $parent_id )
  88. public set_reviews_allowed( $reviews_allowed )
  89. public set_purchase_note( $purchase_note )
  90. public set_attributes( $raw_attributes )
  91. public set_default_attributes( $default_attributes )
  92. public set_menu_order( $menu_order )
  93. public set_post_password( $post_password )
  94. public set_category_ids( $term_ids )
  95. public set_tag_ids( $term_ids )
  96. public set_brand_ids( $term_ids )
  97. public set_virtual( $virtual )
  98. public set_shipping_class_id( $id )
  99. public set_downloadable( $downloadable )
  100. public set_downloads( $downloads_array )
  101. public set_download_limit( $download_limit )
  102. public set_download_expiry( $download_expiry )
  103. public set_gallery_image_ids( $image_ids )
  104. public set_image_id( $image_id = '' )
  105. public set_rating_counts( $counts )
  106. public set_average_rating( $average )
  107. public set_review_count( $count )
  108. public validate_props()
  109. public save()
  110. public delete( $force_delete = false )
  111. public supports( $feature )
  112. public exists()
  113. public is_type( $type )
  114. public is_downloadable()
  115. public is_virtual()
  116. public is_featured()
  117. public is_sold_individually()
  118. public is_viewable()
  119. public is_publicly_viewable()
  120. public is_visible()
  121. public is_purchasable()
  122. public is_on_sale( $context = 'view' )
  123. public has_dimensions()
  124. public has_weight()
  125. public is_in_stock()
  126. public needs_shipping()
  127. public is_taxable()
  128. public is_shipping_taxable()
  129. public managing_stock()
  130. public backorders_allowed()
  131. public backorders_require_notification()
  132. public is_on_backorder( $qty_in_cart = 0 )
  133. public has_enough_stock( $quantity )
  134. public has_attributes()
  135. public has_child()
  136. public child_has_dimensions()
  137. public child_has_weight()
  138. public has_file( $download_id = '' )
  139. public has_options()
  140. public get_title()
  141. public get_permalink()
  142. public get_children()
  143. public get_stock_managed_by_id()
  144. public get_price_html( $deprecated = '' )
  145. public get_cogs_value_html()
  146. public get_formatted_name()
  147. public get_min_purchase_quantity()
  148. public get_max_purchase_quantity()
  149. public get_purchase_quantity_step()
  150. public add_to_cart_url()
  151. public single_add_to_cart_text()
  152. public add_to_cart_aria_describedby()
  153. public add_to_cart_text()
  154. public add_to_cart_description()
  155. public get_image( $size = 'woocommerce_thumbnail', $attr = array(), $placeholder = true )
  156. public get_shipping_class()
  157. public get_attribute( $attribute )
  158. public get_rating_count( $value = null )
  159. public get_file( $download_id = '' )
  160. public get_file_download_path( $download_id )
  161. public get_price_suffix( $price = '', $qty = 1 )
  162. public get_availability()
  163. public set_cogs_value( ?float $value )
  164. public get_cogs_value()
  165. public get_cogs_effective_value()
  166. public get_cogs_total_value()
  167. protected get_valid_tax_classes()
  168. private build_downloads_map( array $downloads )
  169. protected before_data_store_save_or_update()
  170. protected after_data_store_save_or_update( $state )
  171. protected maybe_defer_product_sync()
  172. protected is_visible_core()
  173. protected get_availability_text()
  174. protected get_availability_class()
  175. protected adjust_cogs_value_before_set( ?float $value )
  176. protected get_cogs_effective_value_core()
  177. protected get_cogs_total_value_core()
Примеры#1 Получение и вывод данных товара

Код предназначен для шаблона, который выполняется после инициализации 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() здесь не подходит.

#2 Получение значения для отображения и редактирования
$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.

#5 Сохранение пользовательского метаполя
$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_title018.3320-09-2026
2Хук-Фильтр WordPress: the_category019.0920-09-2026
3Хук-Фильтр WordPress: paginate_links017.6920-09-2026
4Хук-Фильтр WordPress: get_the_excerpt019.0922-09-2026
5Хук-событие WordPress: restrict_manage_posts012.422-09-2026
6Хук-событие WordPress: edit_post_(post_type)018.3322-09-2026
7Функция WordPress: get_site()06.9429-09-2026
8Хук-событие WordPress: network_admin_edit_(action)021.1601-10-2026
9Хук-Фильтр WordPress: post_type_link021.1121-09-2026
10Хук-Фильтр WordPress: excerpt_length019.4120-09-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 9.18. Источник: wp-kama.ru.