WC_Product

Итак, WC_Product – это объект товара в WooCommerce. На этой странице вы найдёте описание его методов и много-много примеров использования.

Документация не всегда позволяет последовательно разобраться в теме, поэтому не могу не порекомендовать вам свой видеокурс по созданию темы для WooCommerce.

Пример использования

Прежде, чем мы перейдём к описанию методов WC_Product, давайте попробуем разобраться, как это вообще работает.

Прежде всего давайте проведём аналогию с объектом WP_Post в WordPress. По сути мы с вами можем получить объект поста функцией вот так $post = get_post( 1 ); а потом вывести его заголовок вот так echo $post->post_title. Кроме того, этот объект уже в принципе доступен в некоторых фильтрах.

То же самое и с WC_Product.

Во-первых, вы можете получить его из ID товара при помощи функции wc_get_product(). Во-вторых, в некоторых фильтрах он уже доступен и нам остаётся только обратиться к его методам. Ну к примеру хук woocommerce_product_is_purchasable, который и вовсе является частью метода is_purchasable(), либо что-то поинтереснее, например woocommerce_product_add_to_cart_text, где объект товара и вовсе доступен в виде глобальной переменной global $product;.

После того, как объект товара доступен в виде переменной, можем обратиться к его методам, чтобы либо получить какую-то информацию о товаре, либо изменить его.

Сначала попробуем получить и вывести:

// допустим, что мы где-то получили ID товара, и записали его в переменную
$product_id = 55;
 
// получаем объект товара функция wc_get_product()
$my_super_product = wc_get_product( $product_id );
 
// можем вывести цену например
echo $my_super_product->get_price_html();

Теперь попробуем изменить:

// к примеру тот же самый товар, сразу получаем его объект
$my_super_product = wc_get_product( 55 );
 
// получаем его цену и чекаем, что она не меньше 100 (в текущей валюте магазина)
$regular_price = $my_super_product->get_regular_price();
if( 100 > $regular_price ) {
 
	// если цена меньше 100, то прибавляем к ней 20% (типо подорожало:)
	$regular_price = $regular_price + $regular_price * 0.2;
 
	$my_super_product->set_regular_price( $regular_price );
	// важно важно важно! после изменения объекта сохраняем его
	$my_super_product->save();
 
}

При изменении товара не забывайте сохраняться методом save(). Этот метод позволяет сэкономить производительность, когда вам нужно изменить несколько параметров товара. Сначала меняем все параметры, а только потом перезаписываем их в базе данных всего одним запросом.

Методы

Тут невероятное количество методов, долго думал, как лучше их описать и решил сделать по категориям. Если вдруг ищете какой-то определённый, то используйте Cmd(Ctrl) + F в браузере для поиска по странице.

Основное

Начнём с методов получения информации о товаре:

get_id()
Получает ID товара.
get_name(), get_title()
Возвращает название товара.
get_slug()
Возвращает ярлык товара.
get_permalink()
Возвращает URL товара.
get_catalog_visibility()
Возвращает:
  • visible – товар отображается в каталоге и результатах поиска
  • catalog – товар отображается в каталоге
  • search – товар отображается в результатах поиска
  • hidden – скрыт из каталога и результатов поиска
Видимость товара в каталоге и результатах поиска
get_children()
Возвращает массив из ID дочерних товаров (например вариаций).
get_cross_sell_ids()
Возвращает массив из ID товаров, установленных в качестве кросселов.
get_upsell_ids()
Возвращает массив из ID товаров, установленных в качестве апсейлов.
get_data()
Возвращает ассоциативный массив со всеми данными товара.
get_date_created()
Возвращает дату создания товара в виде объекта WC_DateTime.
$product = wc_get_product( 26 );
$date = $product->get_date_created();
echo $date->date( 'Y-m-d' ); // 2022-01-20
get_date_modified()
Возвращает дату последнего изменения товара в виде объекта WC_DateTime.
get_description()
Возвращает основное описание товара так, как оно хранится в базе данных.
get_short_description()
Возвращает короткое описание товара.
get_featured()
Возвращает true, если товар отмечен как «рекомендованный».
is_featured()
Отмечен ли товар как рекомендованный? true / false. Является полным эквивалентом метода get_featured().
get_menu_order()
Возвращает номер товара по порядку при ручной сортировке.
get_parent_id()
ID родительского товара.
get_post_password()
Если на просмотр товара установлен пароль, то функция возвращает его в незашифрованном виде.
get_purchase_note()
Возвращает примечание к покупке.
get_status()
Возвращает статус товара, который по сути является статусом поста.
get_total_sales()
Возвращает общее количество продаж этого товара.
has_child()
Возвращает true, если у товара есть дочерние товары (вариативные к примеру).
is_purchasable()
Возвращает true, если товар может быть куплен, иначе – false. По сути чекает цену товара и то, что он опубликован.
is_visible()
Возвращает true, если товар видим в каталоге, иначе – false.

Практически для каждого метода получения информации о товаре, есть аналог для изменения этой информации. Сейчас об этих аналогах и поговорим.

set_id()
Изменяем ID товара для последующего использования в запросе.
set_name()
Изменяет название товара. Пример:
// получаем объект товара
$product = wc_get_product( 26);
 
// получаем текушее название и добавляем слово к нему
$product->set_name( 'Пушистый ' . $product->get_name() ); // Пушистый Вязаный свитер например :)
 
// сохраняем 
$product->save();

При изменении товара не забывайте сохраняться методом save(). Этот метод позволяет сэкономить производительность, когда вам нужно изменить несколько параметров товара. Сначала меняем все параметры, а только потом перезаписываем их в базе данных всего одним запросом.

set_catalog_visibility()
Позволяет изменить видимость товара в каталоге. Принимает значения: hidden, visible, search (только в результатах поиска), catalog (только в каталоге).
set_cross_sell_ids( $cross_sell_ids )
Укажите массив из ID товаров, которые нужно установить в качестве кросселов.
set_upsell_ids( $upsell_ids )
Укажите массив из ID товаров, которые нужно установить в качестве апсейлов.
set_date_created( $date )
Изменяем дату публикации товара. В качестве параметра нужно указать время либо в UNIX-формате, либо в ISO 8601.
set_date_modified( $date )
Изменяем дату обновления товара. В качестве параметра нужно указать время либо в UNIX-формате, либо в ISO 8601.
set_featured( $featured )
Передаём в этот метод значение true, чтобы сделать товар рекомендованым, или false – наоборот.
set_menu_order( $menu_order )
Устаналиваем номер товара по порядку для ручной сортировки.
set_parent_id( $parent_id )
Устаналиваем ID родительского товара.
set_post_password( $password )
Устаналиваем пароль на просмотр товара в незащифрованном виде.
set_purchase_note( $purchase_note )
Изменяем примечание к покупке.
set_status( $status )
Устаналиваем статус товара, который по сути является статусом поста.
set_total_sales( $total_sales )
Устанавливает общее количество продаж этого товара.
set_description( $description )
Меняем описание товара.
delete( $force_delete )
Помещает товар в корзину. При указании параметра метода в значение true полностью удаляет товара минуя корзину. Не нуждается в сохранении методом save().

Рейтинг и отзывы

get_average_rating()
Получает средний рейтинг товара, например 4.5.
get_rating_count( $value )
Возвращает количество отзывов с рейтингами для товара. Также в необязательном параметре метода можно указать количество звёзд, отзывы с которыми будем считать.
get_rating_counts()
Возвращает массив всех рейтингов, оставленных к товару и количество отзывов для каждого рейтинга, например:
$product = wc_get_product( 23 );
print_r( $product->get_rating_counts() );
// например у товара с ID=23 мы можем заметить, что оставлен один отзыв с рейтингом 5 и три отзыва с рейтингом 4.
/*
 Array ( [4] => 3 [5] => 1 )
*/
get_review_count()
Возвращает общее количество отзывов к товару.
get_reviews_allowed()
Возвращает true, если отзывы к товару разрешены, иначе – false.
set_reviews_allowed( $reviews_allowed )
Устанавливаем true, чтобы разрешить отзывы к товару, иначе – false.

Изображения товара

Настройка галереи товара в админке WooCommerce
На скриншоте видим основное изображение товара и его галерею.
get_gallery_image_ids()
Возвращает массив из ID изображений в галерее товара.
get_image()
Возвращает основное изображение товара в виде HTML (тег <img>)
 
Принимает три параметра, первый – размер изображения (по умолчанию woocommerce_thumbnail), второй – дополнительные HTML-атрибуты изображения, третий (false или true) – использовать ли плейсхолдер, если изображение товара не установлено.
get_image_id()
Возвращает ID основного изображения товара.
set_gallery_image_ids( $image_ids )
Перейдайте массив из ID изображений, которые будут в галерее товара.
set_image_id( $image_id )
Устаналиваем основное изображение товара.

Цена товара

Методы для работы с ценами товара в WooCommerce

Начнём с методов получения цены товара. Обычно в них не передаём никаких параметров.

get_price()
Возвращает текущую активную цену товара, числовое значение. Если товар сейчас на распродаже, то вернёт цену распродажи.
get_regular_price()
Возвращает базовую цену товара в виде числа, не на распродаже.
get_sale_price()
Возвращает цену товара на распродаже в виде числового значения, даже если сейчас она не идёт.
get_date_on_sale_from()
Возвращает дату старта распродажи в виде объекта WC_DateTime или null, если она не указана.
get_date_on_sale_to()
Возвращает дату завершения распродажи в виде объекта WC_DateTime или null, если она не указана.
is_on_sale()
Возвращает true, если товар в данный момент на распродаже, иначе – false.
get_price_html()
Возвращает цену в виде HTML, которая отображается пользователям с учётом форматирования и валюты.

Пример:

// получаем объект товара с ID=55
$true_product = wc_get_product( 55 );
 
// выводим цену товара, если например она больше 100
if( $true_product->get_price() > 100 ) {
	echo 'Цена: ' . $true_product->get_price_html();
}

Теперь пришло время менять цену товара, также при помощи методов. Каждый из этих методов принимает один параметр – новую цену товара в виде числа.

set_price( $price )
Устаналивает активную цену товара для дальнейшего использования в запросе.
set_regular_price( $price )
Устаналивает обычную цену товара, не на распродаже.
set_sale_price( $price )
Устаналивает распродажную цену товара.
set_date_on_sale_from( $date )
Устанавливаем дату начала распродажи. В качестве параметра нужно указать время либо в UNIX-формате, либо в ISO 8601.
set_date_on_sale_to( $date )
Устанавливаем дату завершения распродажи. В качестве параметра нужно указать время либо в UNIX-формате, либо в ISO 8601.

Обратите внимание, что сами по себе все эти методы работают только в рамках текущего запроса (на текущей странице). Но только два из них – set_regular_price() и set_sale_price() позволяют изменить значение в базе данных, но и тогда нужно сохранить изменения методо save(). Пример:

// меняем обычную и распродажную цену товара с ID=55
$true_product = wc_get_product( 55 );
 
$true_product->set_regular_price( 150 );
$true_product->set_sale_price( 100 );
 
$true_product->save();

Наличие на складе (Управление запасами)

Методы WC_Product для управления запасами товара на складе
get_sku()
Получает артикул товара.
is_in_stock()
По сути проверяет, может ли товар быть куплен.
is_on_backorder()
Проверяет, доступен ли товар по предзаказу? true / false
get_low_stock_amount()
Возвращает значение, которое установлено как «Граница малых запасов» для этого конкретного товара.
get_manage_stock()
Возвращает true, если у товара включена галка управления запасами, иначе – false.
managing_stock()
Всё то же самое, что и get_manage_stock(), но также проверяет опцию woocommerce_manage_stock в базе данных, вот эту опцию:
Управление запасами в WooCommerce
get_max_purchase_quantity()
Возвращает максимальное количество товара, которое можно купить за раз, либо -1, если нет ограничений.
get_min_purchase_quantity()
Возвращает минимальное количество товара, которое можно купить за раз.
get_stock_quantity()
Количество в запасе.
get_stock_status()
Возвращает статус наличия товара на складе. Возможные значения: instock (в наличии), outofstock (не в наличии) и onbackorder (предзаказ)
has_enough_stock( $qty )
Возвращает true, если на складе имеется достаточное количество товара для добавления в заказ, иначе – false.
get_availability_class()
Возвращает CSS-класс для товара, в зависимости от его доступности на складе. Эти классы: in-stock, out-of-stock, available-on-backorder.
get_availability_text()
Возвращает переведённый текст доступности товара на складе, например «В наличии»
get_availability()
По сути возвращает массив, состоящий из get_availability_text() и get_availability_class(), например:
/*
Array
(
    [availability] => Доступно для предзаказа
    [class] => available-on-backorder
)
*/
get_backorders()
Возвращает yes, если при включенном управлении запасами предзаказы разрешены, nofify – если при включенном управлении запасами предзаказы разрешены с уведомлением клиента. Иначе – no.
backorders_allowed()
Возвращает true, если при включенном управлении запасами предзаказы разрешены или разрешены с уведомлением клиента. Иначе – false.
backorders_require_notification()
Возвращает true, если при включенном управлении запасами предзаказы разрешены с уведомлением клиента. Иначе – false.
get_sold_individually()
Возвращает true, если опция «Продавать индивидуально» включена.
is_sold_individually()
По сути является аналогом метода get_sold_individually(), но с дополнительным фильтром woocommerce_is_sold_individually.
set_sku()
Изменяем артикул товара.
set_backorders( $backorders )
Передайте в этот параметр значения yes, no или notify, чтобы включить/отключить предзаказы.
set_low_stock_amount( $amount )
Устанавливает значение «Граница малых запасов» для этого конкретного товара.
set_manage_stock( $manage_stock )
Установите true, чтобы включить управление запасами для товара, иначе – false.
set_stock_quantity( $quantity )
Устаналиваем количество товара на складе.
set_stock_status( $stock_status )
Устанавливает статус наличия товара на складе. Возможные значения: instock (в наличии), outofstock (не в наличии) и onbackorder (предзаказ)
set_sold_individually( $sold_individually )
Передаём в параметре true, чтобы включить опцию «Продавать индивидуально», false – чтобы отключить её.

Доставка

Методы WC_Product для работы с доставкой товара
needs_shipping()
Нуждается ли товар в доставке? true/false
has_dimensions()
Возвращает true, если у товара установлены габариты, иначе – false
has_weight()
Указан ли вес товара? true/false
get_dimensions( false )
Возвращает массив с габаритами товара.
 
Вы получите PHP-уведомление и рекомендацию использовать функцию wc_format_dimensions(), если используете этот метод с параметром true
 
Пример результата:
/* 
Array ( [length] => 10 [width] => 5 [height] => 5 )
*/
get_height()
Получает числовое значение высоты товара.
get_length()
Получает числовое значение длины товара.
get_width()
Получает числовое значение ширины товара.
get_weight()
Получает числовое значение веса товара.
child_has_dimensions()
Возвращает true, если дочерний товар (вариация например) имеет хотя бы одно значение габаритов (высота/длина/ширина).
child_has_weight()
Возвращает true, если дочерний товар (вариация например) имеет заполненным поле вес.
get_shipping_class()
Возвращает ярлык класса доставки товара.
get_shipping_class_id()
Возвращает ID класса доставки товара.
set_height( $height )
Задаёт высоту товара.
set_length( $length )
Задаёт длину товара.
set_width( $width )
Задаёт ширину товара.
set_weight( $weight )
Задаёт вес товара.
set_shipping_class_id( $shipping_class_id )
Изменяет класс доставки товара, в метод передаём его ID.

Типы товаров

get_type()
Возвращает тип товара. Например simple, grouped, external, variable или произвольный.
get_virtual()
Возвращает true, если является виртуальным товаром, false – не является.
is_virtual()
Является аналогом метода get_virtual() с применяемым фильтром woocommerce_is_virtual.
is_type( $types )
Позволяет проверить тип товара, например:
if( $product->is_type( array( 'simple', 'external' ) ) {
	// товар является простым или партнёрским
}
 
if( $product->is_type( 'variable' ) ) {
	// это явно вариативный товар
}
set_virtual( $true )
Устаналиваем true, чтобы сделать этот товар виртуальным товаром, false – не виртуальным.

Скачиваемые товары

Работаем с классом WC_Product со скачиваемыми товарами
get_downloadable()
Возвращает true, если это скачиваемый товар, false – если нет.
is_downloadable()
Является ли товар скачиваемым? true / false. По сути является аналогом метода get_downloadable() с применением хука woocommerce_is_downloadable.
get_download_expiry()
Возвращает количество дней, по окончанию которых ссылка на скачивание перестанет работать.
get_download_limit()
Возвращает лимит загрузок.
get_downloads()
Возвращает массив объектов WC_Product_Download файлов для загрузки. Их параметры мы можем получить в цикле:
$files = $product->get_downloads();
if( $files ) {
	foreach( $files as $key => $file ) {
		echo '<p>Название файла: ' . $file->get_name() . '</br>';
		echo 'Ссылка на файл: ' . $file->get_file() . '</p>';
	}
}
/*
Название файла: Гора
Ссылка на файл: https://localhost/images/mountain.jpg
 
Название файла: Облака
Ссылка на файл: https://localhost/images/clouds.jpg
*/
has_file()
Возвращает true, если к скачиваемому товару прикреплён файл, иначе – false.
set_downloadable( $downloadable )
Передайте в параметре true, если хотите сделать этот товар скачиваемым, false – нескачиваемым.
set_download_expiry( $download_expiry )
Изменяет количество дней, по окончанию которых ссылка на скачивание перестанет работать.
get_download_limit( $download_limit )
Изменяем лимит загрузок для товара.
set_downloads( $downloads )
Позволяет через код добавить файлы в загружаемый товар. Нужно передать массив объектов WC_Product_Download файлов для загрузки.

Атрибуты

атрибуты товара
get_attribute( $attribute )
Получает значение атрибута товара.
 
В качестве значения параметра метода мы указываем либо ярлык атрибута, который вы найдёте на странице Товары > Атрибуты, либо значение поля Имя для индивидуальных атрибутов товара.
 
Если у товара несколько атрибутов одного типа, то они будут разделены либо , либо  |  (если это индивидуальный атрибут товара).
get_attributes()
Получаем массив из всех атрибутов товара. Если быть точным, то массив из объектов WC_Product_Attribute. Пример ниже:
$attributes = $product->get_attributes();
if( $attributes ) {
	foreach( $attributes as $attribute ) {
		echo '<p>Название атрибута: ' . $attribute->get_name() . '</br>';
		echo 'Значение атрибута: ' . join( ', ', $attribute->get_options() ) . '</p>';
	}
}
/*
Название атрибута: attr
Значение атрибута: dfsf, fsdfsd
 
Название атрибута: pa_cvet
Значение атрибута: #000, #f0f0f0
*/
has_attributes()
Возвращает true, если у товара есть публичные атрибуты.
set_attributes( $attributes )
Передайте массив объектов атрибутов WC_Product_Attribute, чтобы задать их для товара.

Добавление в корзину

add_to_cart_text()
Возвращает текст, который отображается на кнопке добавления в корзину для товара. Например для простого товара этот текст по умолчанию – «В корзину». Кстати, текст этот мы меняли при помощи фильтров в этом уроке.
add_to_cart_url()
URL, при переходу по которому товар будет добавлен в корзину. По умолчанию это значение может быть например ?add-to-cart=34.
single_add_to_cart_text()
Возвращает текст кнопки добавления в корзину для отображения на странице самого товара.

Категории и теги товара

get_category_ids()
Возвращает массив из ID категорий товара.
set_category_ids( $term_ids )
Передайте массив из ID категорий, в которые нужно добавить товар.
get_tag_ids()
Возвращает массив из ID меток товара.
set_tag_ids( $term_ids )
Передайте массив из ID меток, которые нужно добавить к товару.

Метаданные товара

get_meta( $key, $single )
Получает значение метаданных товара. Метод очень похож на функцию get_post_meta() с тем лишь исключением, что ID товара нам лишний раз уже указывать не нужно. Описание параметров можете почитать там же.
get_meta_data()
Получает массив всех метаданных товара.
meta_exists( $key )
Проверяет, действительно ли существуют метаданные с указанным ключом.
add_meta_data( $key, $value, $unique )
Метод очень похож на функцию add_post_meta() с тем лишь исключением, что ID товара нам лишний раз уже указывать не нужно. Описание параметров можете почитать там же.
delete_meta_data( $key )
Удаляет метаданные по значению их ключа.
delete_meta_data_by_mid( $mid )
Удаляем метаданные товара по значению их ID.
update_meta_data( $key, $value, $meta_id )
Обновляет метаданные по значению ключа, либо добавляет, если их не существует.
save_meta_data()
Сохраняет изменённые метаданные в базе данных.

Вариации

Технически методы для работы с вариациями товаров уже скорее относятся к классу WC_Product_Variable, а не к WC_Product, но во-первых, у меня нет отдельного поста-описания того класса, а во-вторых, эти методы также применяются к товарам после получения их объекта функцией wc_get_product().

get_available_variations( $return )
Позволяет получить все включенные вариации вариативного товара. В качестве параметра метода можно указать objects, тогда результат будет возвращён в виде массива объектов.
Array
(
    [0] => Array
        (
            [attributes] => Array
                (
                    [attribute_pa_color] => black
                    [attribute_magical] => Yes
                )
 
            [availability_html] => <p class="stock in-stock">9 in stock</p>
            [backorders_allowed] => 
            [dimensions] => Array
                (
                    [length] => 
                    [width] => 
                    [height] => 
                )
            [dimensions_html] => N/A
            [display_price] => 155
            [display_regular_price] => 155
            [image] => Array( ... )
            [image_id] => 129
            [is_downloadable] => 
            [is_in_stock] => 1
            [is_purchasable] => 1
            [is_sold_individually] => yes
            [is_virtual] => 
            [max_qty] => 1
            [min_qty] => 1
            [price_html] => <span class="price"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>155.00</bdi></span></span>
            [sku] => MISH-123-TEST
            [variation_description] => <p>Тестовое описание вариации</p>
            [variation_id] => 270
            [variation_is_active] => 1
            [variation_is_visible] => 1
            [weight] => 
            [weight_html] => N/A
        )
 
    [1] => Array( ... )

Документация не всегда позволяет последовательно разобраться в теме, поэтому не могу не порекомендовать вам свой видеокурс по созданию темы для WooCommerce.

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал