这是最合乎逻辑和最简单的方法。
简单产品使用以下代码:
$objProduct = new WC_Product();
对于可变产品使用下面的代码行。
$objProduct = new WC_Product_Variable();
下一步是设置元属性,如名称、价格等和变体数据(在可变产品的情况下)。
$objProduct->set_name("Product Title");
$objProduct->set_status("publish"); // can be publish,draft or any wordpress post status
$objProduct->set_catalog_visibility('visible'); // add the product visibility status
$objProduct->set_description("Product Description");
$objProduct->set_sku("product-sku"); //can be blank in case you don't have sku, but You can't add duplicate sku's
$objProduct->set_price(10.55); // set product price
$objProduct->set_regular_price(10.55); // set product regular price
$objProduct->set_manage_stock(true); // true or false
$objProduct->set_stock_quantity(10);
$objProduct->set_stock_status('instock'); // in stock or out of stock value
$objProduct->set_backorders('no');
$objProduct->set_reviews_allowed(true);
$objProduct->set_sold_individually(false);
$objProduct->set_category_ids(array(1,2,3)); // array of category ids, You can get category id from WooCommerce Product Category Section of Wordpress Admin
如果您要上传产品图片,请使用以下代码
function uploadMedia($image_url){
require_once('wp-admin/includes/image.php');
require_once('wp-admin/includes/file.php');
require_once('wp-admin/includes/media.php');
$media = media_sideload_image($image_url,0);
$attachments = get_posts(array(
'post_type' => 'attachment',
'post_status' => null,
'post_parent' => 0,
'orderby' => 'post_date',
'order' => 'DESC'
));
return $attachments[0]->ID;
}
// above function uploadMedia, I have written which takes an image url as an argument and upload image to wordpress and returns the media id, later we will use this id to assign the image to product.
$productImagesIDs = array(); // define an array to store the media ids.
$images = array("image1 url","image2 url","image3 url"); // images url array of product
foreach($images as $image){
$mediaID = uploadMedia($image); // calling the uploadMedia function and passing image url to get the uploaded media id
if($mediaID) $productImagesIDs[] = $mediaID; // storing media ids in a array.
}
if($productImagesIDs){
$objProduct->set_image_id($productImagesIDs[0]); // set the first image as primary image of the product
//in case we have more than 1 image, then add them to product gallery.
if(count($productImagesIDs) > 1){
$objProduct->set_gallery_image_ids($productImagesIDs);
}
}
保存产品以获得 WooCommerce 产品 ID
$product_id = $objProduct->save(); // it will save the product and return the generated product id
注意:对于简单的产品,以上步骤就足够了,以下步骤适用于可变产品或具有属性的产品。
以下代码用于添加产品属性。
$attributes = array(
array("name"=>"Size","options"=>array("S","L","XL","XXL"),"position"=>1,"visible"=>1,"variation"=>1),
array("name"=>"Color","options"=>array("Red","Blue","Black","White"),"position"=>2,"visible"=>1,"variation"=>1)
);
if($attributes){
$productAttributes=array();
foreach($attributes as $attribute){
$attr = wc_sanitize_taxonomy_name(stripslashes($attribute["name"])); // remove any unwanted chars and return the valid string for taxonomy name
$attr = 'pa_'.$attr; // woocommerce prepend pa_ to each attribute name
if($attribute["options"]){
foreach($attribute["options"] as $option){
wp_set_object_terms($product_id,$option,$attr,true); // save the possible option value for the attribute which will be used for variation later
}
}
$productAttributes[sanitize_title($attr)] = array(
'name' => sanitize_title($attr),
'value' => $attribute["options"],
'position' => $attribute["position"],
'is_visible' => $attribute["visible"],
'is_variation' => $attribute["variation"],
'is_taxonomy' => '1'
);
}
update_post_meta($product_id,'_product_attributes',$productAttributes); // save the meta entry for product attributes
}
以下代码用于添加产品变体。
$variations = array(
array("regular_price"=>10.11,"price"=>10.11,"sku"=>"ABC1","attributes"=>array(array("name"=>"Size","option"=>"L"),array("name"=>"Color","option"=>"Red")),"manage_stock"=>1,"stock_quantity"=>10),
array("regular_price"=>10.11,"price"=>10.11,"sku"=>"ABC2","attributes"=>array(array("name"=>"Size","option"=>"XL"),array("name"=>"Color","option"=>"Red")),"manage_stock"=>1,"stock_quantity"=>10)
);
if($variations){
try{
foreach($variations as $variation){
$objVariation = new WC_Product_Variation();
$objVariation->set_price($variation["price"]);
$objVariation->set_regular_price($variation["regular_price"]);
$objVariation->set_parent_id($product_id);
if(isset($variation["sku"]) && $variation["sku"]){
$objVariation->set_sku($variation["sku"]);
}
$objVariation->set_manage_stock($variation["manage_stock"]);
$objVariation->set_stock_quantity($variation["stock_quantity"]);
$objVariation->set_stock_status('instock'); // in stock or out of stock value
$var_attributes = array();
foreach($variation["attributes"] as $vattribute){
$taxonomy = "pa_".wc_sanitize_taxonomy_name(stripslashes($vattribute["name"])); // name of variant attribute should be same as the name used for creating product attributes
$attr_val_slug = wc_sanitize_taxonomy_name(stripslashes($vattribute["option"]));
$var_attributes[$taxonomy]=$attr_val_slug;
}
$objVariation->set_attributes($var_attributes);
$objVariation->save();
}
}
catch(Exception $e){
// handle exception here
}
}
就是这样
上面的代码足以添加带有图像、属性和变体的简单或可变 WooCommerce 产品。