В этой статье я сначала расскажу как программно добавить товар в интернет-магазине, а затем расскажу, как программно изменить какой то парамметр продукта в вордпрессе. Так как в WooCommerce может быть несколько типо продукта: простой, вариативный и сгруппированный, то я расскажу о том, как добавить каждый из них.
Пример кода, добавления простого товара в вукомерц:
$post = array( 'post_author' => 1, 'post_content' => '', //Описание товара 'post_status' => "publish", 'post_title' => "Мой товар", // Название товара 'post_type' => "product", ); $post_id = wp_insert_post($post); //Создаем запись wp_set_object_terms($post_id, 22, 'product_cat'); //Задаем категорию товара $puthUpload = wp_upload_dir(); $PhotoProd = "mainimg.jpg"; //Картинка if($PhotoProd){ $PhotoProd = trim($PhotoProd); $PhotoProd = $puthUpload["baseurl"]."/productimg/images/".$PhotoProd; $thumbid = media_sideload_image($PhotoProd, $post_id, $desc = null, $return = 'id'); set_post_thumbnail($post_id, $thumbid); } $PhotosProd = "img1.jpg,img2.jpg,img3.jpg"; //Доп. картинка if($PhotosProd){ $arPhotosProd = explode(",",$PhotosProd); foreach($arPhotosProd as $key=>$Item){ if($Item){ $Item = trim($Item); $Item = $puthUpload["baseurl"]."/productimg/images/".$Item; $imgID[$key] = media_sideload_image($Item, $post_id, $desc = null, $return = 'id'); } } update_post_meta( $post_id, '_product_image_gallery', implode(", ", $imgID)); } update_post_meta($post_id, '_sku', 123); //Артикул update_post_meta( $post_id, '_visibility', 'visible' ); // Видимость: открыто //update_post_meta( $post_id, 'total_sales', '0'); //Создается произвольное поле update_post_meta( $post_id, '_downloadable', 'no'); //Не скачиваемый update_post_meta( $post_id, '_virtual', 'no'); //Не виртуальный wp_set_object_terms($post_id, "simple", 'product_type'); //Задаем тип товара update_post_meta( $post_id, '_regular_price', 1000); //Базовая цена update_post_meta( $post_id, '_sale_price', 500); //Цена распродажи
Я постарался подробно прокомментировать этот код, но навсякий случай сделаю небольшие пояснения. Строчкой wp_set_object_terms($post_id, 22, 'product_cat'); - вы задаете категорию вашего продукта где 22 это id категории. Строчкой update_post_meta($post_id, '_sku', 123); - вы устанавливаете артикул, где 123 и есть ваш артикул.
Также обратите внимание как добавляются картинки товара, в моем примере картинки находятся в папке /productimg/images/
Теперь приведу чуть более сложный пример, добавления вариативного товара. Для этого вам надо вставить код, и убрать в нем все, что идет после строчки update_post_meta( $post_id, '_virtual', 'no');. После этой строчки будет следующий код:
wp_set_object_terms($post_id, "variable", 'product_type'); $VariationAttribute = "Цвет"; $VariationAttributesValue[] = "Красный"; $VariationAttributesValue[] = "Желтый"; $VariationAttributesValue[] = "Зеленый"; $PriceVariation["Красный"] = 100; $PriceVariation["Желтый"] = 200; $PriceVariation["Зеленый"] = 350; add_variation_product($post_id,$VariationAttribute,$VariationAttributesValue,$PriceVariation); function add_variation_product( $post_id, $select_attributes, $select_attribute_terms, $PriceVariation) { /* $select_attributes - атрибут по которому у нас будет вариация $select_attribute_terms - значения атрибутов для вариации */ $product_attributes = $select_attributes; //Атрибут $attributes = wc_attribute_taxonomy_name( $product_attributes ); $pa_attr = 'pa_' . $product_attributes; wp_set_object_terms( $post_id, $select_attribute_terms, $pa_attr ); $thedata = array( $pa_attr => array( 'name' => $pa_attr, 'value' => '', 'postion' => '0', 'is_visible' => '1', 'is_variation' => '1', 'is_taxonomy' => '1' ) ); update_post_meta( $post_id, '_product_attributes', $thedata ); foreach($select_attribute_terms as $key => $attribute_term) { $variation = array( 'post_title' => 'Product #' . $post_id . ' Variation', 'post_content' => '', 'post_status' => 'publish', 'post_parent' => $post_id, 'post_type' => 'product_variation' ); $variation_id = wp_insert_post( $variation ); if(!$variation_id){ echo "Ошибка создания вариации"; }else{ echo "Вариация создана"; } update_post_meta( $variation_id, '_regular_price', $PriceVariation[$attribute_term] ); update_post_meta( $variation_id, '_price', $PriceVariation[$attribute_term] ); update_post_meta( $variation_id, 'attribute_' . $attributes, $attribute_term ); } WC_Product_Variable::sync( $post_id ); }
По этому коду тоже дам небольшие пояснения. Как вы наверное уже заметили, мы написали свою небольшую функцию для добавления товара и назвали ее add_variation_product. Мы передаем ей следующие парамметры: $post_id - id нашей записи, $VariationAttribute - название атрибута (хар-ки) по которому у нас будет вариация, $VariationAttributesValue - массив значений атрибута (хар-ки), $PriceVariation - массив с ценами для каждого атрибута (характеристики)
И наконец рассмотрим пример добавления сгруппированного товара, как и в прошлом и случае стираем все, что идет после строчки update_post_meta( $post_id, '_virtual', 'no'); и вставляем после нее такой код:
wp_set_object_terms($post_id, "grouped", 'product_type'); update_post_meta( $postId, '_children', array(97,100));
Тут по сути добавляется одна строчка - update_post_meta( $postId, '_children', array(97,100));, где $postId - id записи сгруппированного товара, массив array(97,100) содержит id, которые надо сгруппировать, в данном случае это 97 и 100.
Если вам надо изменить какие-то данные у товара, то используете к примеру update_post_meta(25, '_sku', 5467); Этой строчкой вы измените артикул на 5467 у товара с id 25. В случае, когда вам надо изменить не '_sku', а другой парамметр, который вы не нашли в моем примере, то могу посоветовать посмотреть в базе данных, как он пишется, т.е. к примеру: _sku, _sale_price, _visibility и.т.д.
Вот пожалуй и все, если есть какие-то вопросы, пишите их в комментариях.