Программное добавление и изменение, товаров в WooCommerce

В этой статье я сначала расскажу как программно добавить товар в интернет-магазине, а затем расскажу, как программно изменить какой то парамметр продукта в вордпрессе. Так как в 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 и.т.д.

Вот пожалуй и все, если есть какие-то вопросы, пишите их в комментариях.

Комменатрии
Александр 21.12.2022 17:24:33
Здравствуйте! Подскажите, пожалуйста, какие файлы (библиотеки) php нужно добавить в исполнительный файл?
Ответить
Добавить комментарий