Итак, 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 в браузере для поиска по странице.
Начнём с методов получения информации о товаре:
visible – товар отображается в каталоге и результатах поискаcatalog – товар отображается в каталогеsearch – товар отображается в результатах поискаhidden – скрыт из каталога и результатов поиска
$product = wc_get_product( 26 ); $date = $product->get_date_created(); echo $date->date( 'Y-m-d' ); // 2022-01-20
true, если товар отмечен как «рекомендованный».true / false. Является полным эквивалентом метода get_featured().true, если у товара есть дочерние товары (вариативные к примеру).true, если товар может быть куплен, иначе – false. По сути чекает цену товара и то, что он опубликован.true, если товар видим в каталоге, иначе – false.Практически для каждого метода получения информации о товаре, есть аналог для изменения этой информации. Сейчас об этих аналогах и поговорим.
// получаем объект товара $product = wc_get_product( 26); // получаем текушее название и добавляем слово к нему $product->set_name( 'Пушистый ' . $product->get_name() ); // Пушистый Вязаный свитер например :) // сохраняем $product->save();
При изменении товара не забывайте сохраняться методом save(). Этот метод позволяет сэкономить производительность, когда вам нужно изменить несколько параметров товара. Сначала меняем все параметры, а только потом перезаписываем их в базе данных всего одним запросом.
hidden, visible, search (только в результатах поиска), catalog (только в каталоге).true, чтобы сделать товар рекомендованым, или false – наоборот.true полностью удаляет товара минуя корзину. Не нуждается в сохранении методом save().4.5.$product = wc_get_product( 23 ); print_r( $product->get_rating_counts() ); // например у товара с ID=23 мы можем заметить, что оставлен один отзыв с рейтингом 5 и три отзыва с рейтингом 4. /* Array ( [4] => 3 [5] => 1 ) */
true, если отзывы к товару разрешены, иначе – false.true, чтобы разрешить отзывы к товару, иначе – false.
<img>)
Начнём с методов получения цены товара. Обычно в них не передаём никаких параметров.
true, если товар в данный момент на распродаже, иначе – false.Пример:
// получаем объект товара с ID=55 $true_product = wc_get_product( 55 ); // выводим цену товара, если например она больше 100 if( $true_product->get_price() > 100 ) { echo 'Цена: ' . $true_product->get_price_html(); }
Теперь пришло время менять цену товара, также при помощи методов. Каждый из этих методов принимает один параметр – новую цену товара в виде числа.
Обратите внимание, что сами по себе все эти методы работают только в рамках текущего запроса (на текущей странице). Но только два из них – 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();

true / falsetrue, если у товара включена галка управления запасами, иначе – false.get_manage_stock(), но также проверяет опцию woocommerce_manage_stock в базе данных, вот эту опцию:
instock (в наличии), outofstock (не в наличии) и onbackorder (предзаказ)true, если на складе имеется достаточное количество товара для добавления в заказ, иначе – false.in-stock, out-of-stock, available-on-backorder.get_availability_text() и get_availability_class(), например:/*
Array
(
[availability] => Доступно для предзаказа
[class] => available-on-backorder
)
*/yes, если при включенном управлении запасами предзаказы разрешены, nofify – если при включенном управлении запасами предзаказы разрешены с уведомлением клиента. Иначе – no.true, если при включенном управлении запасами предзаказы разрешены или разрешены с уведомлением клиента. Иначе – false.true, если при включенном управлении запасами предзаказы разрешены с уведомлением клиента. Иначе – false.true, если опция «Продавать индивидуально» включена.get_sold_individually(), но с дополнительным фильтром woocommerce_is_sold_individually.yes, no или notify, чтобы включить/отключить предзаказы.true, чтобы включить управление запасами для товара, иначе – false.instock (в наличии), outofstock (не в наличии) и onbackorder (предзаказ)true, чтобы включить опцию «Продавать индивидуально», false – чтобы отключить её.
true/falsetrue, если у товара установлены габариты, иначе – falsetrue/falsewc_format_dimensions(), если используете этот метод с параметром true/*
Array ( [length] => 10 [width] => 5 [height] => 5 )
*/true, если дочерний товар (вариация например) имеет хотя бы одно значение габаритов (высота/длина/ширина).true, если дочерний товар (вариация например) имеет заполненным поле вес.simple, grouped, external, variable или произвольный.true, если является виртуальным товаром, false – не является.get_virtual() с применяемым фильтром woocommerce_is_virtual.if( $product->is_type( array( 'simple', 'external' ) ) { // товар является простым или партнёрским } if( $product->is_type( 'variable' ) ) { // это явно вариативный товар }
true, чтобы сделать этот товар виртуальным товаром, false – не виртуальным.

true, если это скачиваемый товар, false – если нет.true / false. По сути является аналогом метода get_downloadable() с применением хука woocommerce_is_downloadable.$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 */
true, если к скачиваемому товару прикреплён файл, иначе – false.true, если хотите сделать этот товар скачиваемым, false – нескачиваемым.
, либо | (если это индивидуальный атрибут товара). 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 */
true, если у товара есть публичные атрибуты.?add-to-cart=34.Технически методы для работы с вариациями товаров уже скорее относятся к классу WC_Product_Variable, а не к WC_Product, но во-первых, у меня нет отдельного поста-описания того класса, а во-вторых, эти методы также применяются к товарам после получения их объекта функцией wc_get_product().
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.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.